具体的机器学习分析过程(一)

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()

但是这个图的效果不好,(捂脸)这不是模型的问题,是我自己的问题。

 

 
shit

在后面调整下坐标轴的范围,plt.ylim(0.8,1.0)

 
one

 


从这个看出来改变k还是有机会改变这个评分的。但是要注意,这只是一次验证的结果,我还是没有使用交叉验证的过程。明天再对这部分进行修改。
有一个比较重要的点,就是我一定是去在这个过程中寻找最优的算法,才是最有用的。
我是改变了哪些参数,然后如何评估这个模型的好坏。

2018/10/02
为什么上面的那个直方图看不出来什么效果呢???这是为什么???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值