2018/10/02
说实话,经过了半年再去看以前写的笔记,感觉当时什么也没干。
可能干的工作也不少,但是没有留下来有价值的东西。
就是东西的深度不够。
而且代码的利用率基本上没有。
2018/03/17
当你选定一个算法的时候,怎么去评价一个算法的准确率标准,这就需要有一套算法或者模型的评价标准。
这部分,就想起来原来的那些什么交叉验证了。
明天就去用knn去模拟一下这个过程。
2018/03/18
两个问题需要考虑:
1、使用库本身的函数有没有相应的参数可以说明模型本身的性能
2、库本身的参数有没有地方展示哪里有过拟合的问题(我看见有哪个关于树结构的一些调优)
问题回答:
1、库本身有这部分的参数回馈,另外提供这个交叉验证的函数,也就是说这部分,我完全不用自己去做。
2、这部分,好像是没有,而且感觉这种信息应该本身就是看上一个问题数据来完成分析的。
我注意到,他的库里面是有这个准确率和召回率的。能得到的信息还是很多的。
这个时候就得把这个过程好好的模拟一遍,然后尽可能的到完全的信息。
关于模型评估的指标,可以看这个,
http://charleshm.github.io/2016/03/Model-Performance/
同时讲述了精确率和召回率这个东西。
模型本身只有一个平均精确率的概念(这个具体怎么算后续再仔细了解),如果想得到召回率这些,需要借助一些其他的手段。
http://blog.csdn.net/yuanyu5237/article/details/44278759
version_0:单次划分训练集与测试集的各种数据评分。
1 #! /bin/python
2 #coding:utf-8
3 #Author:VChao
4 #2018/03/18
5
6 #version_0
7
8 from sklearn.datasets import load_iris
9 from sklearn.model_selection import train_test_split
10 from sklearn import neighbors
11
12 #This one report the performance
13 from sklearn import metrics
14
15 def main():
16
17 iris = load_iris()
18 X_train,X_test,y_train,y_test = train_test_split(iris.data,
19 iris.target,test_size = 0.2)
20
21 print y_test.shape
22
23 clf = neighbors.KNeighborsClassifier(10)
24 clf.fit(X_train,y_train)
25
26 predicted = clf.predict(X_test)
27
28 print metrics.classification_report(y_test,predicted,target_names=iris.target_names)
29 print clf.score(X_test,y_test)
30 pass
31
32
33 if __name__ == "__main__":
34 main()
输出是:
(30,)
precision recall f1-score support
setosa 1.00 1.00 1.00 11
versicolor 0.75 1.00 0.86 9
virginica 1.00 0.70 0.82 10
avg / total 0.93 0.90 0.90 30
0.9
划分测试机与训练集的时候有一个随机数的设置,可能每次都不一样。
得到了这个相应的评价标准,那么这些东西会随着什么进行变化呢?是跟你的数据有关,还是说模型的参数有关呢,这个时候应该可以设计一些图表准确的描述这些个数据!他们一直在说一个roc曲线,这个东西现在还不是很理解。
version_1:测试修改k的值来进行绘制ap值。(用直方图)
1 #! /bin/python
2 #coding:utf-8
3 #Author:VChao
4 #2018/03/18
5
9 import matplotlib
10 matplotlib.use("Agg")
11 import matplotlib.pyplot as plt
12
13 from sklearn.datasets import load_iris
14 from sklearn import neighbors
15
16 from sklearn.model_selection import train_test_split
17
18
19
20 def main():
21
22 iris = load_iris()
23 data = iris.data
24 X_train,X_test,y_train,y_test = train_test_split(iris.data,
25 iris.target,test_size = 0.2)
26
27 score = []
28 for k in range(5,15):
29 clf = neighbors.KNeighborsClassifier(k)
30 clf.fit(X_train,y_train)
31 score.append(clf.score(X_test,y_test))
32
33 plt.bar(range(5,15),score)
34 plt.savefig("bar.png")
35
36
37
38 if __name__ == "__main__":
39 main()
但是这个图的效果不好,(捂脸)这不是模型的问题,是我自己的问题。
在后面调整下坐标轴的范围,plt.ylim(0.8,1.0)
从这个看出来改变k还是有机会改变这个评分的。但是要注意,这只是一次验证的结果,我还是没有使用交叉验证的过程。明天再对这部分进行修改。
有一个比较重要的点,就是我一定是去在这个过程中寻找最优的算法,才是最有用的。
我是改变了哪些参数,然后如何评估这个模型的好坏。
2018/10/02
为什么上面的那个直方图看不出来什么效果呢???这是为什么???