小标
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
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号