6个套路入门ML:用鸢尾花data建立python机器学习的初步印象(二)

(五)用一些算法进行估计
重点地方到了,机器学习开始发挥作用了。
这部分包括:1、对数据集进行分离(分为训练集、验证集等);2、采用10倍交叉验证设置测试机制;3、根据鸢尾花测量维度构建5种不同模型来预测其种类;4、选择最佳模型

5.1 建立验证数据集
建立验证数据集的目的是寻找我们所建立的模型中最优者,因此我们需要一部分与机器学习算法独立的数据集,从而采用一些统计方法对这部分未知数据进行评估,以判断我们使用的估计模型的准确性,我们将把加载的数据集分为两部分,其中80%将用于训练我们的模型,20%将被用作验证数据集。

# Split-out validation dataset
array = dataset.values #将数据库转换成数组形式
X = array[:,0:4] #取前四列,即属性数值
Y = array[:,4] #取最后一列,种类
validation_size = 0.20 #验证集规模
seed = 7
X_train, X_validation, Y_train, Y_validation = model_selection.train_test_split(X, Y, test_size=validation_size, random_state=seed) #分割数据集

X_train and Y_train就是训练集,X_validation and Y_validation就是验证集。
5.2 测试机制
采用10倍交叉验证来评估模型的准确性。通过把我们的数据集分为10份,其中9份用于训练,1份用于验证,并重复训练分组的所有组合。

# Test options and evaluation metric
seed = 7
scoring = 'accuracy'

我们设置scoring变量对所构建的每个模型进行评估,其中accuracy用以评估模型的一个度量值,它等于模型正确预测实际数据的数量/数据集中所有数据总数,这一比率乘以100%(比如95%的精确度)。
5.3 构建模型
在不知道哪种算法最好的条件下,根据图形可以看到某些类在某些方面是部分可线性分离的,因此,我们期望一般意义上的好结果。
在这里采用6种算法:逻辑回归(LR)、线性判别分析(LDA)、K最近邻(KNN)、分类和回归树(CART)、高斯朴素贝叶斯(NB)、支持向量机(SVM)。这里综合了简单线性(LR和LDA),非线性(KNN,CART,NB和SVM)算法,我们在每次运行之前重置随机数种子,以确保使用完全相同的数据隔离来执行每个算法的评估,以确保结果直接可以比较。

# Spot Check Algorithms
models = [] #建立列表
models.append(('LR', LogisticRegression())) #往maodels添加元组(算法名称,算法函数)
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC()))
# evaluate each model in turn
results = []
names = []
for name, model in models: #将算法名称与函数分别读取
    kfold = model_selection.KFold(n_splits=10, random_state=seed) #建立10倍交叉验证
    cv_results = model_selection.cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring) #每一个算法模型作为其中的参数,计算每一模型的精度得分
    results.append(cv_results)
    names.append(name)
    msg = "%s: %f (%f)" % (name, cv_results.mean(), cv_results.std()) 
    print(msg) 

5.4 选择最优模型
通过运行,得到每个模型的评估精度:
LR: 0.966667 (0.040825)
LDA: 0.975000 (0.038188)
KNN: 0.983333 (0.033333)
CART: 0.975000 (0.038188)
NB: 0.975000 (0.053359)
SVM: 0.981667 (0.025000)
可以看到KNN的估计精度最高,括号内为估计结果的标准误。
我们还可以绘制模型评估结果的图形,并比较每个模型的差异和平均精度。 每个算法有一个精确度量的群体,因为每个算法被评估10次(10次交叉验证)。

# Compare Algorithms
fig = plt.figure()
fig.suptitle('Algorithm Comparison')
ax = fig.add_subplot(111)
plt.boxplot(results)
ax.set_xticklabels(names)
plt.show()

得到:


Paste_Image.png

算法比较的箱形图,可以看到每个算法精度的上沿基本贴着1,表明模型估计精度较高。

6、预测
在得到KNN算法为测试中最佳模型的基础上,现在我们想了解验证集上模型的准确性。我们将对该算法进行独立性的终极检验,在这里设置验证集的作用体现出来了,以防止训练过程中的失误,比如训练集体过度拟合或者数据遗漏,两者都将导致过于乐观的结果。
我们可以直接在验证集上运行KNN模型,并将结果总结为最终准确度得分,混淆矩阵和分类报告。我们可以看到准确度是0.9或90%。 混淆矩阵提供了三个错误的指示。 最后,分类报告通过精确度,召回率,f1得分和支持显示出优异的结果(授予验证数据集很小)提供每个类别的细目。

# Make predictions on validation dataset
knn = KNeighborsClassifier()
knn.fit(X_train, Y_train) #knn拟合序列集
predictions = knn.predict(X_validation) #预测验证集
print(accuracy_score(Y_validation, predictions)) #验证集精度得分
print(confusion_matrix(Y_validation, predictions)) #混淆矩阵
print(classification_report(Y_validation, predictions)) #分类预测报告

输出以下结果:
0.9

[[ 7 0 0]
[ 0 11 1]
[ 0 2 9]]
(混淆矩阵每一行代表实际类别,每一列代表预测的类别,因此有三个类别,第一行表明类别1的7个被全部预测准确,第二行类别2的12个有11个预测准确,另一个被预测到了类3中;第三行则是11个有9个预测准确,2个杯预测到了类别2,基于此,下边就计算了分类预测精度的报告)
precision recall f1-score support

Iris-setosa 1.00 1.00 1.00 7
Iris-versicolor 0.85 0.92 0.88 12
Iris-virginica 0.90 0.82 0.86 11

avg / total 0.90 0.90 0.90 30

简单介绍一下混淆矩阵:混淆矩阵(confusion matrix),又称为可能性表格或是错误矩阵。它是一种特定的矩阵用来呈现算法性能的可视化效果,通常是监督学习(非监督学习,通常用匹配矩阵:matching matrix)。其每一列代表预测值,每一行代表的是实际的类别。这个名字来源于它可以非常容易的表明多个类别是否有混淆。
最后一行是用support 加权平均算出来的,如0.90= (71.00+120.85+11*0.86)/ 30

总结:通过本文你就可以使用python进行机器学习,基于上面教程,最多需要5到10分钟。
根据上面初步的python机器学习,,笔者认为,完成上面的内容,并不需要你掌握关于编程、机器学习的一切内容:
你不需要了解一切。(至少不是现在)你只需按照教程输入代码并运行,得到结果,你暂时并不需要了解一切,大量使用Python中的帮助(“FunctionName”)来了解您正在使用的所有功能。

你不需要知道算法如何工作。了解选取和如何配置机器学习算法很重要。但是学习算法可以稍后再来。您需要在很长一段时间内慢慢地建立这个算法知识。今天,从平台开始吧。

你不需要是Python程序员。如果您是新手,Python语言的语法比较直观的。就像其他语言一样,这样可以让你大部分时间专注于函数调用(例如函数())和赋值(例如a =“b”)。若你是一个开发人员,你知道如何真正快速地掌握语言的基础知识。稍后开始深入细节。
您不需要成为机器学习专家。您可以稍后了解各种算法的优点和局限性,还有很多帖子可以以后阅读,以了解机器学习项目的步骤,以及使用交叉验证评估准确性的重要性。
机器学习项目中的其他步骤如何。我们没有涵盖机器学习项目中的所有步骤,因为这是您的第一个项目,我们需要关注关键步骤。即,加载数据,查看数据,评估一些算法并做出一些预测。在后面的教程中,我们可以查看其他数据准备和结果改进任务。
这也是本文的初衷。
本文完整代码见:https://github.com/zhangjuying20000/iris-machine-learning

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容