首页 > 代码库 > Mooc机器学习-02监督学习

Mooc机器学习-02监督学习

1 监督学习

  利用一组带标签的数据, 学习从输入到输出的映射, 然后将这种映射关系应用到未知数据, 达到分类或者回归的目的

  (1) 分类: 当输出是离散的, 学习任务为分类任务

    技术分享

    输入: 一组有标签的训练数据(也叫观察和评估), 标签表明了这些数据(观察)的所属类别, 图中"猫"和"狗"就是标签

    输出: 分类模型根据这些训练数据, 训练自己的模型参数, 学习出一个适合这组数据的分类器, 当有新数据(非训练数据)需要进行类别判断, 就可以将这组数据作为输入送给学习好的分类器进行判断(得到标签)

    训练集: 训练模型已经标注的数据, 用来建立模型发现规律

    测试集: 已标注的数据, 只不过把标注隐藏了, 再送给训练好的模型, 比对结果与原来的标注, 评判该模型的学习能力  

    一般来说, 获得了一组标注好的数据, 70%当做训练集, 30%当做测试集, 另外还有交叉验证法, 自助法来评估学习模型

    评价标准

      1) 准确率

        所有预测对的

        把正类预测成正类(TP)

        把负类预测成负类(TN)

        准确率 = (TP+TN)/总数量

      2) 精确率

        以二分类为例

        预测为正的样本是真的正样本

        把正类预测为正类(TP)

        把负类预测为正类(FP)

        技术分享

      3) 召回率

        样本中的正比例有多少被预测正确

        把正类预测成正类(TP)

        把正类预测成负类(FN)

        技术分享

    sklearn提供的分类函数有:

      K近邻(knn), 朴素贝叶斯(naivebayes), 支持向量机(svm), 决策树(decision tree), 神经网络模型(Neural networks)

  (2) 回归: 当输出是连续的, 学习任务是回归任务

    通过回归, 可以了解两个或多个变数是否相关, 方向及其强度, 可以建立数学模型来观察特定变数以及预测特定的变数

    回归可以根据给出的自变量估计因变量的条件期望

    技术分享

    sklearn提供的回归函数放在了两个子模块

      sklearn.linear_model, 线性函数: 普通线性回归函数(LinearRegression), 岭回归(Ridge), Lasso

      sklearn.preprocessing, 非线性回归: 多项式回归(PolynomialFeatures)

    回归应用

      对一些带有时序信息的数据进行预测或者趋势拟合, 在金融以及其他涉及时间序列分析的领域

      股票趋势预测

      交通流量预测

2 分类

2.1 人体运动信息评级实例

  可穿戴设备可以获取人体各项数据, 通过这些数据可以进行分析和建模, 可以对用户状况进行判断

  在数据源中有一个特征文件*.feature, 一个标签文件*.label

  特征文件包含41列特征 

  技术分享

  技术分享

  温度: 静止时人体一般维持在36.5度上下, 当温度高于37度时, 可能是进行短时间的剧烈运动

   一型/二型三轴加速区: 这是两个型号的加速度传感器, 两个加速度传感器可以相互印证来保证数据的完整性准确性, 获得的数据是在x,y,z三个轴上的加速度, 如z轴上加速度剧增, 很有可能就是人体向上跳

  陀螺仪: 获得用户当前身体的角度, 可以判断姿态

  磁场: 检测用户周围磁场强度和数值大小, 可以帮助我们理解用户所在的环境, 一般地, 人在一个办公场所, 用户座位的周围的磁场大体上是固定的, 因此当磁场发生改变时, 可以推测用户的位置和场景发生了变化

  标签文件对应于特征文件的每一行, 总共有25中姿态

2.2 基本分类模型

  (1) k近邻分类器(KNN)

    原有已经分类好的点, 现加入新的点, 判断其类别就是查看所有点与它的距离, 取前K个, 这K个点哪一部分的的点的数量多, 这个新加入的点就属于哪一部分

    技术分享

    创建knn分类器

      sklearn.neighbors.KNeighborsClassifier()

      n_neighbors: 用于指定分类器中K的大小, 默认为5

      weights: 设置K个点对分类结果影响的权重, 默认平均权重uniform, 距离权重(越近权重越高)distance, 或者是自定义计算函数

      algorithm: 寻找临近点的方法, 默认为auto(根据数据自动选择), ball_tree, kd_tree, brute等

    使用kkn

X = [[0],[1],[2],[3]]y = [0,0,1,1]from sklearn.neighbors import KNeighborsClassifierneight = KNeighborsClassifier(n_neighbors=3)neight.fit(X,y)Out[5]: KNeighborsClassifier(algorithm=auto, leaf_size=30, metric=minkowski,           metric_params=None, n_jobs=1, n_neighbors=3, p=2,           weights=uniform)neight.predict([[1.1]])Out[6]: array([0])

 

      其中X是数据, y是标签, 使用predict()来预测新的点, 检查前3个点, 应该是[1],[2],[0]主要是标签0的数据点, 因此[1.1]被划分到标签0中    

    关于k的选取

      较大的k值, 由于邻域较大, 有可能和他就近的分类点不多, 所以可能结果出错

      较小的k值, 邻域较小, 有可能邻居是噪声点, 导致过拟合

      一般来说, 选择较小的k, 然后使用交叉验证选取最优的k值

  (2) 决策树

    一般是询问分类点的属性决定走向的分支, 不断查询获得最终的分类

    无房产单身年收入55k的决策效果

    技术分享

    创建决策树

      sklearn.tree.DecisionTree.Classifier()

      criterion: 选择属性的准则, gini(基尼系数), entropy(信息增益)

      max_features: 从多少个特征中选择最优特征, 默认是所有特征个数, 还可以是固定数目, 百分比等

    决策树的使用

from sklearn.datasets import load_irisfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import cross_val_scoreclf = DecisionTreeClassifier()iris = load_iris()cross_val_score(clf, iris.data, iris.target, cv=10)Out[12]: array([ 1.        ,  0.93333333,  1.        ,  0.93333333,  0.93333333,        0.86666667,  0.93333333,  1.        ,  1.        ,  1.        ])

      cross_val_score是一个计算交叉验证值的函数

      iris.data作为数据集, iris.target作为目标结果

      cv=10表示使用10折交叉验证

      同样可以使用 clf.fit(X,y)来生成, clsf.predict(x)进行函数预测

  (3) 朴素贝叶斯

    朴素贝叶斯是以贝叶斯定理为基础的多分类的分类器

    技术分享

    sklearn实现了三个朴素贝叶斯分类器

    技术分享

    区别在于假设某一特征的所有属于某个类别的观测值符合特定分布, 分类问题的特征包括人的身高, 身高符合高斯分布, 这类问题适合高斯朴素贝叶斯   

     创建朴素贝叶斯

      sklearn.naive_bayes.GaussianNB()

      priors: 给定各个类别的先验概率, 空(按训练数据的实际情况进行统计), 给定先验概率(训练过程不能更改)

    朴素贝叶斯的使用

import numpy as npX = np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])Y = np.array([1,1,1,2,2,2])from sklearn.naive_bayes import GaussianNBclf = GaussianNB(priors=None)clf.fit(X,Y)Out[18]: GaussianNB(priors=None)clf.predict([[-0.8,-1]])Out[19]: array([1])

    朴素贝叶斯是典型的生成学习方法, 由训练数据学习联合概率分布, 并求得后验概率分布

    朴素贝叶斯一般在小规模数据上的表现很好, 适合进行多分类任务

        

    

 

     

     

 

Mooc机器学习-02监督学习