4.sklearn机器学习-------分类(监督学习)

1.监督学习

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

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

                       回归:当输出是连续的,学习任务为回归任务。

2.分类学习

输入:一组有标签的训练数据(也称观察和评估),标签表明了这些数 据(观察)的所署类别。

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

3.分类学习评价标准

• 训练集(training set):顾名思义用来训练模型的已标注数据,用来建立模型,发现规律。
• 测试集(testing set):也是已标注数据,通常做法是将标注隐藏,输送给训练好的模型,通过结果与真实标注进行对比,评估模型的学习能力。

训练集/测试集的划分方法:根据已有标注数据,随机选出一部分数据 (70%)数据作为训练数据,余下的作为测试数据,此外还有交叉验证法, 自助法用来评估分类模型。

 ①精确率::精确率是针对我们预测结果而言的,(以二分类为例)它表示 的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能 了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP), 也就是

                                     

②召回率:是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP), 另一种就是把原来的正类预测为负类(FN),也就是

                                         

4.分类算法


①K近邻分类器(KNN)

KNN:通过计算待分类数据点,与 已有数据集中的所有数据点的距离。取 距离最小的前K个点,根据“少数服从 多数“的原则,将这个数据点划分为出 现次数最多的那个类别。

如下图xu点,应分类为w1类别。

                                       

在sklearn库中,可以使用sklearn.neighbors.KNeighborsClassifier 创建一个K近邻分类器,主要参数有:

                   • n_neighbors:用于指定分类器中K的大小(默认值为5,注意与 kmeans的区别) 

                   • weights:设置选中的K个点对分类结果影响的权重(默认值为平均 权重“uniform”,可以选择“distance”代                      表越近的点权重越高, 或者传入自己编写的以距离为参数的权重计算函数)

它的主要参数还有:

• algorithm:设置用于计算临近点的方法,因为当数据量很大的情况 下计算当前点和所有点的距离再选出最近的k各点,这个计算量是很费时的,所以(选项中有ball_tree、kd_tree和brute,分别代表不同的寻找邻居的优化算法,默认值为auto,根据训练数据自动选择)

实例:

from sklearn.neighbors import KNeighborsClassifier
#导入K近邻分类器

#创建一组数据X和它对应的标签y
X=[[0],[1],[2],[3]]
y=[0,0,1,1]
#参数 n_neighbors设置为 3,即使用最近的3个邻居作为分类的依据,
# 其他参数保持默认值,并将创建好的实例赋给变量 neighneigh =KNeighborsClassifier(n_neighbors=3)
#调用 fit() 函数,将训练数据X和标签y送入分类器进行学习
neigh.fit(X,y)
#调用 predict() 函数,对未知分类样本[1.1] 分类,
#可以直接并将需要分类的数据构造为数组形式作为参数传入得到分类标签作为返回值。

print(neigh.predict([[1.1]]))

结果:

[0]
样例输出值是 0,表示K近邻分类器通过计算样本 [1.1]与训练数据的距离,
0,1,2 3 个邻居作为依据,根据投票法最终将样本分为类别 0

使用经验:

在实际使用时,我们可以使用所有训练数据构成特征 X 和标签 y,使用 fit() 函数进行训练。在正式分类时,通过一次性构造测试集或者一个一个输入样本的方式,得到样本对应的分类结果。有关K 的取值:

 • 如果较大,相当于使用较大邻域中的训练实例进行预测,可以减小估计误差, 但是距离较远的样本也会对预测起作用,导致预测错误。

 • 相反地,如果 K 较小,相当于使用较小的邻域进行预测,如果邻居恰好是噪 声点,会导致过拟合。

 • 一般情况下,K 会倾向选取较小的值,并使用交叉验证法选取最优 K 值。

②决策树

决策树是一种树形结构的分类器,通过顺序询问分类点的属性决定分类点最终的类别。通常根据特征的信息增益或其他指标,构建一颗决策树。在分类时,只需要按照决策树中的结点依次进行判断,即可得到样本所属类别。

例如,根据下图这个构造好的分类决策树, 一个无房产,单身,年收入55K的人的会被归入 无法偿还信用卡这个类别。

                                              

在sklearn库中,可以使用sklearn.tree.DecisionTreeClassifier 建一个决策树用于分类,其主要参数有:

                      • criterion :用于选择属性的准则,可以传入“gini”代表基尼系数,或者“entropy”代表信息增益。

                     • max_features :表示在决策树结点进行分裂时,从多少个特征中选择最优特征。可以设定固定数目、百分比或                        其他标准。它的默认值是使用所有特征个数。

#sklearn 内嵌的鸢尾花数据集
from sklearn.datasets import load_iris
#导入决策树分类器
from sklearn.tree import DecisionTreeClassifier
#导入计算交叉验 证值的函数 cross_val_score,用于验证K的大小
from sklearn.model_selection import  cross_val_score
#使用默认参数,创建一颗基于基尼系数的决策树,并将该决策树分类器赋值给变量clf
clf=DecisionTreeClassifier()
#将鸢尾花数据赋值给变量 iris
iris=load_iris()
#决策树分类器做为待评估的模型,iris.data鸢尾花数据做为特征,
# iris.target鸢尾花分类标签做为目标结果,通过设定cv10,使用10折交叉验证。
#得到最终的交叉验证得分。
print(cross_val_score(clf,iris.data,iris.target,cv=10))

结果:

[1.         0.93333333 1.         0.93333333 0.93333333 0.86666667
 0.93333333 0.93333333 1.         1.        ]

也可以仿照之前 K近邻分类器的使用方法,利用 fit() 函数训练模型并使用 predict() 函数预测。

使用经验:

• 决策树本质上是寻找一种对特征空间上的划分,旨在构建一个训练数据拟合的好,并且复杂度小的决策树。

• 在实际使用中,需要根据数据情况,调整DecisionTreeClassifier类中传入的参数,比如选择合适的criterion,设置随机变量等。

③朴素贝叶斯

朴素贝叶斯分类器是一个以贝叶斯定理为基础的多分类的分类器。 对于给定数据,首先基于特征的条件独立性假设,学习输入输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。

                                        

在sklearn库中,实现了三个朴素贝叶斯分类器,如下表所示:


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

在sklearn库中,可以使用sklearn.naive_bayes.GaussianNB创建一个高斯 朴素贝叶斯分类器,其参数有:

                   • priors :给定各个类别的先验概率。如果为空,则按训练数据的实际情况 进行统计;如果给定先验概率,则在训                       练过程中不能更改。

import numpy as np
#导入朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
X=np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]])
Y=np.array([1,1,1,2,2,2])
#使用默认参数,创建一个高斯朴素贝叶斯分类器,并将该分类器赋给变量clf
clf = GaussianNB(priors=None)
#使用fit()函数进行训练,并使用predict()函数进行预测
clf.fit(X,Y)
#测试时可以构造二维数组达到同时预测多个样本的目的
print(clf.predict([[-0.8,-1],[0,-1]]))

结果:

[1 1]

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值