数据挖掘——基于sklearn包的分类算法小结

  

        目录node

1、分类算法简介python

2、KNN算法算法

3、贝叶斯分类算法dom

4、决策树算法机器学习

5、随机森林算法分布式

6、SVM算法函数

 

 

 1、分类算法简介oop

一、概念学习

  1.1 监督学习(Supervised Learning)测试

  从给定标注(训练集有给出明确的因变量Y)的训练数据集中学习出一个函数,根据这个函数为新数据进行标注。

  1.2 无监督学习(Unsupervised Learning)

  从给定无标注(训练集无明确的因变量Y)的训练数据中学习出一个函数,根据这个函数为全部数据标注。

  1.3 分类 (Classification)

  分类算法经过对已知类别训练数据集的分析,从中发现分类规则,以此预测新数据的类别,分类算法属于监督学习

 

二、经常使用的分类算法

  • KNN算法(K-近邻分类算法)
  • 贝叶斯算法
  • 决策树算法
  • 随机森林算法
  • SVM算法(支持向量机)

三、分类问题的验证方法

 

交叉验证(Cross Validation):训练集与测试集

 

K折交叉验证(K-fold Cross Validation):设置k=10,那么咱们把原来的数据集随机分为10份,分别为{D1,D2,D3...D10}

 

接着,使用D1做为测试集,{D2,D3...D10}做为训练集,计算得分S1

 

           使用D2做为测试集,{D1,D3...D10}做为训练集,计算得分S2

 

.........

 

最后,使用D10做为测试集,{D1,D2...D9}做为训练集,计算得分S10

 

计算{S1,S2,...,S10}的平均值,做为模型的综合评分

 

 2、KNN算法

一、KNN算法简介

  K近邻分类算法(k-Nearest Neighbors):从训练集中找到和新数据最接近的K条记录,而后根据他们的主要分类来决定新数据的类别。

  KNN算法属于最简单的机器学习算法之一,核心思想是每一个样本均可以用它最接近的k个邻近值来表明,即若是一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具备这个类别上样本的特性。因此KNN算法的结果很大程度商取决于K的选择。

 

二、算法的优缺点

  2.1 优势

  • 简单,易于理解,易于实现,无需估计参数,无需训练
  • 适合对稀有事件进行分类
  • 特别适用于多分类问题(对象具备多个分类标签,比SVM表现更好)

  2.2 缺点

  • 当样本不平衡时(一个类样本容量很大,其余类样本容量很小),该样本的K个邻居中大容量类的样本占多数
  • 计算量较大,由于对每个待分类的文本,都要计算它到全体已知样本的距离
  • 针对结果没法给出像决策树那样的规则

三、python中的实现过程

  以iris数据集为例,基于python中sklearn包实现KNN分类 

  【iris数据集:经常使用的分类实验数据集,即鸢尾花卉数据集,是一个多重变量数据集,经过包含的4个属性(花萼长度、花萼宽度、花瓣长度、花瓣宽度)来预测属于三类鸢尾花中的哪一类。】

  #python的sklearn包中自带了iris数据集

from sklearn import datasets

iris = datasets.load_iris()

  获得如下类型的数据,共有150行,包含特征属性(feature_names)、特征数据(data)、目标分类名称(target_names)、目标类别(target)

  KNN分类建模的具体代码:

#切分训练集
from sklearn.model_selection import train_test_split
#将数据集按7:3切分为训练集和测试集(特征变量和目标变量)
data_train, data_test, target_train, target_test = train_test_split(
        iris.data,  #特征数据
        iris.target,  #目标数据
        test_size=0.3)  #测试集占比

#  KNN建模(1折交叉验证)
from sklearn import neighbors
knnmodel = neighbors.KNeighborsClassifier(n_neighbors=3) #n_neighbors参数为分类个数

knnmodel.fit(data_train,target_train)

knnmodel.score(data_train,target_train)

# 5折交叉验证
from sklearn.model_selection import cross_val_score
#cross_val_score函数传入模型、特征数据、目标数据和  K值
cross_val_score(knnmodel,iris.data,iris.target,cv=5)

#模型预测,获得分类结果
knnmodel.predict([[0.1,0.2,0.3,0.4]]) 

 

3、贝叶斯分类算法

一、贝叶斯分类算法简介

  贝叶斯分类算法(NB):是统计学的一种分类方法,它是利用贝叶斯定理的几率统计知识,对离散型数据进行分类的算法。

  朴素贝叶斯(Naive Bayes Classifier)的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的几率,哪一个最大,就认为此待分类项属于哪一个类别

  贝叶斯定理:  formula

  tips:python中sklearn包的naive_bayes模块中,有三种贝叶斯算法类型:

  • GaussuanNB   高斯贝叶斯 :适用于特征值符合正态分布的数据,不须要知道具体每一个样本的数值,只需知道样本符合什么样的正态分布(均值、方差)便可计算;
  • BernoulliNB  伯努利贝叶斯:适用于特征值符合伯努利分布的数据,便是/否,0/1;
  • MultinomialNB  多项式贝叶斯:不知道特征值符合哪一种分布的时候,使用多项式贝叶斯算法计算每一个特征的几率,因此须要知道每一个特征值的数值大小(最经常使用于文本分类)。

 

 

二、算法的优缺点

  2.1 优势

  • 方法简单,分类准确率高
  • 在接受大数据量训练和查询时速度快

  2.2 缺点

  • 因为贝叶斯定理假设一个属性值对给定类的影响独立于其它属性的值,而此假设在实际状况中常常是不成立的,所以其分类准确率可能会降低,即没法处理基于特征组合所产生的变化结果

三、python中的实现过程

  使用多项式贝叶斯算法进行文本分类的 

     #创建含多篇文本的语料库,并指定文本类别——文本分词——文本向量化

     #多项式贝叶斯建模 

from sklearn.naive_bayes import MultinomialNB
#多项式贝叶斯分类模型创建
MNBmodle = MultinomialNB()
#将文本向量做为特征值传入,将分类序列做为目标序列传入
MNBmodle.fit(textVector,corpos['class'])
MNBmodle.score(textVector,corpos['class'])

  #传入新文本,向量化后进行分类预测

#传入新文本进行分类测试
newTexts = ['''
据介绍,EliteBook 840 G4是一款采用14英寸1080p屏幕的商务笔记本,
硬件配置方面,入门级的EliteBook 840 G4搭载Intel Core i3-7100处理器,
配备4GB内存和500GB机械硬盘,预装Windows 10操做系统。
高端机型可选择更大容量的内存和SSD固态硬盘。
机身四周提供了USB 3.0、USB-C、DisplayPort、15针迷你D-Sub,
支持蓝牙4.2和802.11ac Wi-Fi。
整机重1.48千克。
''']
#对新内容分词
for i in range(len(newTexts)):
    newTexts[i] = " ".join(jieba.cut(newTexts[i]))
#新内容的文本向量
newTextVector = countVectorizer.transform(newTexts)
#进行预测
MNBmodle.predict(newTextVector)

 

4、决策树算法

一、决策树算法简介

  决策树算法(Decision Tree):经过对训练样本的学习,并创建分类规则,而后依据分类规则,对新样本数据进行分类预测。

  决策树是在已知各类状况发生几率的基础上,经过构成决策树来求取净现值的指望值大于等于零的几率,评价项目风险,判断其可行性的决策分析方法,是直观运用几率分析的一种图解法。

     决策树是一种树形结构,其中每一个内部节点表示一个属性上的测试,每一个分支表明一个测试输出,每一个叶节点表明一种类别。

 

二、算法的优缺点

  2.1 优势

  • 易于理解和实现
  • 可同时处理数值型和非数值型数据

  2.2 缺点

  • 对连续性的字段较难预测
  • 对有时间顺序的数据,须要不少的预处理工做
  • 当类别较多时,错误可能增长的比较快

三、python中的实现过程

  基于sklearn包的决策树建模 

  #将训练集中的离散变量虚拟化

dummycolumns = ['data3','data4']

for column in dummycolumns:
    data[column] = data[column].astype('category')

dummydata = pd.get_dummies(data,
                           columns=dummycolumns,
                           prefix=dummycolumns,
                           prefix_sep='=',
                           drop_first=True)

  #构建模型

#特征变量
fdata = dummydata[['data1','data2','data3_dummy','data_dummy']]
#目标变量
tdata = dummydata['target']
#构建模型
from sklearn.tree import DecisionTreeClassifier
dtmodel = DecisionTreeClassifier(max_leaf_nodes=8) #最大叶数为8
#模型验证
from sklearn.model_selection import cross_val_score
cross_val_score(dtmodel,fdata,tdata,cv=10)  #交叉验证10次
#模型训练
dtmodel.fit(fdata,tdata)

  #绘制决策树图(须要下载安装graphviz软件 并 安装pydot包,可参考http://wenda.chinahadoop.cn/question/5518

from sklearn.tree import export_graphviz
with open(r'D:\...\data.dot','w') as f:
    f = export_graphviz(dtmodel, out_file=f)

import pydot
from sklearn.externals.six import StringIO

dot_data = StringIO()
export_graphviz(
        dtmodel, #模型名称
        out_file=dot_data,  #图形数据的输出路径
        class_names=['A','B'],  #目标属性的名称
        feature_names=['a','b','c','d'],  #特征属性的名称
        filled=True, #是否使用颜色填充
        rounded=True, #边框是否圆角
        special_characters=True) #是否有特殊字符(含中文就算)

graph = pydot.graph_from_dot_data(dot_data.getvalue())

graph.get_node('node')[0].set_fontname('Microsoft YaHei') 

graph.write_png(r'D:\...\决策树.png') #输出图形

最终获得以下图的决策树:

 

 

5、随机森林算法

一、随机森林算法简介

  随机森林(RandomForest):是一个包含多个决策树的分类器,而且其输出的类别是由个别树输出的类别的众数而定。

  随机森林几乎能预测任何数据类型的问题,它是一个相对较新的机器学习方法。

二、算法的优缺点

  2.1 优势

  • 适合离散型和连续型的属性数据
  • 对海量数据,尽可能避免了过分拟合的问题
  • 对高纬度数据(文本或语音类型的数据),不会出现特征选择困难的问题
  • 实现简单,训练速度快,适合进行分布式计算

  2.2 缺点

  • 随机森林已经被证实在某些噪音较大的分类或回归问题上会过拟

  • 对于有不一样取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,因此随机森林在这种数据上产出的属性权值是不可信的。

三、python中的实现过程 

  #因为随机森林基于决策树算法,因此数据处理步骤与决策树算法相同

  #模型构建

#模型构建
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import cross_val_score

#比较决策树模型和随机森林模型的评分好坏
dtmodel = DecisionTreeClassifier()
dtscroe = cross_val_score(dtmodel,fdata,tdata,cv=10)
dtscroe.mean() 

rfcmodel = RandomForestClassifier()
rfcscore = cross_val_score(rfcmodel,fdata,tdata,cv=10)
rfcscore.mean() #评分优于决策树算法

  #随机森林模型评分存在阈值,当决策树算法通过参数调优后,模型评分能够达到该阈值

#进行参数调优
dtmodel = DecisionTreeClassifier(max_leaf_nodes=8)
dtscroe = cross_val_score(dtmodel,fdata,tdata,cv=10)
dtscroe.mean()  #评分明显提升

rfcmodel = RandomForestClassifier(max_leaf_nodes=8)
rfcscore = cross_val_score(rfcmodel,fdata,tdata,cv=10)
rfcscore.mean()  #基本与决策树一致

 

6、SVM算法

一、SVM算法简介  

  支持向量机(Support Vector Machine,即SVM)是一种二分类算法,属于通常化线性分类器,这类分类器的特色是可以同时最小化经验偏差与最大化几何边缘区,所以SVM也被称为最大边缘区分类器

  其主要思想为找到空间中的一个可以将全部数据样本划开的超平面,而且使得样本集中全部数据到这个超平面的距离最短

  它在解决小样本、非线性及高维模式识别中表现出许多特有的优点,并可以推广应用到函数拟合等其余机器学习问题中

 

二、算法的优缺点

  2.1 优势

  • SVM 的最终决策函数只由少数的支持向量所肯定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”
  • 少数支持向量决定了最终结果,这不但能够帮助咱们抓住关键样本、“剔除”大量冗余样本
  • 对小样本、非线性及高维模式识别中表现出许多特有的优点

  2.2 缺点

  • SVM算法对大规模训练样本难以实施

  •  用SVM解决多分类问题存在困难

 

三、python中的实现过程 

  python中SVM模型能够分为三种:svm.LinearSVC、svm.NuSVC、svm.SVC

  #根据数据构建简单SVM模型(无参数调优)

 

from sklearn import svm
from sklearn import cross_validation
#根据三种方式分别建模,获得模型评分
svmmodel1 =  svm.SVC()  
cross_validation.cross_val_score(svmmodel1,fdata,tdata,cv=3)

svmmodel2 = svm.NuSVC()
cross_validation.cross_val_score(svmmodel2,fdata,tdata,cv=3)

svmmodel3 = svm.LinearSVC()
cross_validation.cross_val_score(svmmodel3,fdata,tdata,cv=3)
#LinearSVC 评分最好,因此使用该方法建模

svmmodel = svm.LinearSVC()
svmmodel.fit(fdata,tdata)
svmmodel.score(fdata,tdata)
相关文章
相关标签/搜索