机器学习入门之周志华《机器学习》课后习题练习——ch3.4 交叉验证法练习
小标 2018-10-15 来源 : 阅读 1928 评论 0

摘要:本文主要向大家介绍了机器学习入门之周志华《机器学习》课后习题练习——ch3.4 交叉验证法练习,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。

本文主要向大家介绍了机器学习入门之周志华《机器学习》课后习题练习——ch3.4 交叉验证法练习,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。


题目:选择两个UCI数据集,比较10折交叉验证法和留一法所估计出的对率回归的错误率。
其中代码主要参考:https://blog.csdn.net/snoopy_yuan/article/details/64131129
为了练习我采用的数据集与原博客中的有所区别,是UCI中一个霓虹人搞的有关于大肠杆菌中蛋白质的分布的数据集。。。传送门://archive.ics.uci.edu/ml/datasets/Ecoli  
其中一共有8个属性,包括大肠杆菌的名字,以及其余7个不同的指标,最终的预测结果一共有8种不同的分类。
简单说一下原博客中没有提到的而我遇到的一些要点吧。
我主要用到的库有:pandas,numpy,sklearn,matplotlib,
首先是UCI的数据集很多都是.data和.name 结尾的文件,这些文件处理起来不是很方便,为此可以在UCI网站中打开相应的数据集,直接Ctrl+A复制到TXT中,然后复制进EXCEL中进行数据处理,进行简单的分列之后即可得到便于进行数据处理的csv文件了。
其次是在原博客中提到了使用seaborn进行画图,但是最新版本的seaborn中已经不带plt了,所以需要引进matplotlib中的pyplot。
然后是在进行数据处理的时候,原数据集中的分类结果是字符串表示的cp,im,pp等,分别代表蛋白质存在于细胞浆,细胞膜等中,对此字符串可以使用pandas的replace函数对其进行替换。
在替换之后使用sklearn进行10折交叉验证的时候会出现一个提示:Unknown label type:‘unkonwn’,这是因为数据类型没有确定导致的,可以使用.astype(‘int‘)即可。
 

 1 # -*- coding: utf-8 -*
 2 import numpy as np
 3 import seaborn as sns
 4 import pandas as pd
 5 import matplotlib.pyplot as plt
 6 from sklearn.linear_model import LogisticRegression
 7 from sklearn import metrics
 8 from sklearn.model_selection import cross_val_predict
 9 
10 ecoli = pd.read_csv("ecoli.csv")
11 # print(ecoli)
12 # sns.jointplot("mcg", "gvh", tips, kind=‘reg‘)
13 # sns.pairplot(tips)
14 # plt.show()
15 
16 ‘‘‘
17 Class Distribution. The class is the localization site. Please see Nakai &
18                Kanehisa referenced above for more details.
19 
20   cp  (cytoplasm)                                    143
21   im  (inner membrane without signal sequence)        77               
22   pp  (perisplasm)                                    52
23   imU (inner membrane, uncleavable signal sequence)   35
24   om  (outer membrane)                                20
25   omL (outer membrane lipoprotein)                     5
26   imL (inner membrane lipoprotein)                     2
27   imS (inner membrane, cleavable signal sequence)      2
28 ‘‘‘
29 
30 ecoli = ecoli.replace(to_replace=‘cp‘ , value= 143)
31 ecoli = ecoli.replace(‘im‘ , 77)
32 ecoli = ecoli.replace(‘pp‘ , 52)
33 ecoli = ecoli.replace(‘imU‘ , 35)
34 ecoli = ecoli.replace(‘om‘ , 20)
35 ecoli = ecoli.replace(‘omL‘ , 5)
36 ecoli = ecoli.replace(‘imL‘ , 2)
37 ecoli = ecoli.replace(‘imS‘ , 2)
38 print(ecoli)
39 
40 X = ecoli.values[:,1:7]   #training set
41 y = ecoli.values[:,8].astype(‘int‘)    #training set
42 # print(X)
43 # print(y)
44 
45 # log-regression lib model
46 log_model = LogisticRegression()
47 m = np.shape(X)[0]
48 
49 # 10-folds CV
50 y_pred = cross_val_predict(log_model, X, y, cv=10)
51 print(metrics.accuracy_score(y, y_pred))
52 # print(y_pred)
53 
54 
55 #LOO
56 from sklearn.model_selection import LeaveOneOut
57 loo = LeaveOneOut()
58 accuracy = 0;
59 for train, test in loo.split(X):
60     log_model.fit(X[train], y[train])  # fitting
61     y_p = log_model.predict(X[test])
62     if y_p == y[test] : accuracy += 1
63 print(accuracy / np.shape(X)[0])

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能机器学习频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved