Giter Club home page Giter Club logo

scikit-learn-ml's Introduction

机器学习算法实现

image-20200716191936979

😄 本仓库是《scikit-learn 机器学习 常用算法及编程实战》的学习笔记,使用sklearn实现常用的机器学习算法,附有代码、文档以及相关数据集。

😄也可以到我的网站上阅读

  1. K-近邻算法
  2. 线性回归算法
  3. 逻辑回归算法
  4. 决策树算法
  5. 支持向量机SVM
  6. 朴素贝叶斯算法
  7. PCA算法
  8. K-均值算法

scikit-learn是一个开源的Python语言机器学习工具包。它涵盖了几乎所有主流机器学习算法的实现,并且提供了一致的调用接口。它基于Numpy和SciPy等Python数值计算库,提供了高效的算法实现。总结起来,scikit-learn工具包有以下几个优点:

  • 文档齐全:官方文档齐全,更新及时。
  • 接口易用:针对所有的算法提供了一致的接口调用规则,不管是KNN、K-Means还是PCA。
  • 算法全面:涵盖主流机器学习任务的算法,包括回归算法、分类算法、聚类分析、数据降维处理等。

当然,scikit-learn不支持分布式计算,不适合用来处理超大型数据,但这并不影响scikit-learn作为一个优秀的机器学习工具库这个事实。

机器学习应用开发的典型步骤

假设:要开发一个房价评估系统,目标是对一个已知特征的房子价格进行评估预测。

建立这样一个系统,通常包括以下几个步骤:

(1)数据采集和标记

我们需要大量不同特征的房子和所对应的价格信息,可以直接从房产评估中心获取房子的相关信息,如房子的面子、地理位置、朝向、价格等。另外还有一些信息房产评估中心不一定有,比如房子所在地的学校情况,这一特征往往会影响房子的价格,这个时候就需要通过其他途径收集这些数据。以上收集到的所有数据叫做训练样本,或数据集。房子的面积、地理位置等称为特征。在数据采集阶段,需要收集尽量多的特征。特征越全、数据越多,训练出来的模型才会越准确。

我们的房屋价格信息是从房产评估中心获得的,这一数据可能不准确。因为有时为了避税,房屋的评估价格会比房子的真实交易价格低很多。这时就需要采集房子的实际成交价格,这一过程称为数据标记。数据标记可以是人工标记,比如逐个从房产中介那里打听房子的实际成交价格;也可以是自动标记,比如通过分析数据,找出房产评估中心给的房子评估价格和真实成交价格的匹配关系,然后直接算出来。数据标记对有监督的学习方法是必须的。比如,针对垃圾邮件过滤系统,训练样本必须包含该邮件是否为垃圾邮件的标记数据。

(2)数据清洗

假设我们采集到的数据里,关于房子的面积,有按平方米计算的,也有按平方英尺计算的,这时需要对面积单位进行统一。这个过程称为数据清洗。数据清洗还包括去掉重复数据及噪声数据,让数据具备结构化特征,以方便作为机器学习算法的输入。

(3)特征选择

假设我们采集到了房子的100个特征,通过逐个分析这些特征,最终选择了30个特征作为输入。这个过程称为特征选择。特征选择的方法之一是人工选择,即对逐个特征进行人工分析,然后选择合适的特征集合。另外一个方法是通过模型来自动选择,如后面将要介绍的主成分分析(PCA)算法。

(4)模型选择

房价评估系统是属于有监督学习的回归学习类型,我们可以选择最简单的线性模型来模拟。选择哪个模型,和问题领域、数据量大小、训练时长、模型的准确度等多方面因素有关。这些内容将在第3章进行介绍。

(5)模型训练和测试

把数据集分成训练数据集和测试数据集,一般按照8:2或者7:3来划分,然后用训练数据集来训练模型。训练出参数后再使用测试数据集来测试模型的准确度。为什么要分出一个单独的测试数据集来做测试呢?答案是必须保证测试的准确性,即模型的准确性是要用它没见过的数据来测试,而不能用那些用来训练这个模型的数据来测试。理论上更合理的数据集划分方案是分成3个,即再分出一个交叉验证数据集。这些内容将在第3章进行介绍。

(6)模型性能评估和优化

模型训练出来后,需要对该模型进行性能评估。性能评估一般包括以下几个方面:

训练时长:是指需要花多少时间来训练这个模型。对于一些海量数据的机器学习应用,可能需要1个月甚至更长的时间来训练一个模型,这个时候算法的训练性能就变得很重要了。

另外,还需要判断数据集是否足够多。一般而言,对于复杂特征的系统,训练数据集越大越好。

然后还需要判断模型的准确性,即对于一个新的数据能否准确的进行预测。

最后需要判断模型是否能满足应用场景的性能要求,如果不能满足要求,就需要优化,然后继续对模型进行训练和评估,或者更换为其他模型。

(7)模型使用

训练出来的模型可以把参数保存起来,下次使用时直接加载即可。一般来讲,模型训练需要的计算量是很大的,也需要较长的时间来训练,这是因为一个好的模型参数,需要对大型数据集进行训练后才能得到。而真正使用模型时,其计算量是比较少的,一般是直接把新样本作为输入,然后调用模型即可得出结果。

scikit-learn-ml's People

Contributors

dongzhougu avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.