当前位置:   article > 正文

机器学习之模型评估_testsize=0.3

testsize=0.3

整体思路:先获取数据,把数据分为训练数据和测试数据,然后在不同k值的模型下分别训练和测试,得出不同k值情况下的模型预测准确性,最后把准确性可视化输出进行整体评估。

1.获取数据

  1. from sklearn import datasets
  2. iris=datasets.load_iris()
  3. x=iris.data
  4. y=iris.target

2.分离数据

  1. from sklearn.model_selection import train_test_split
  2. x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3)

test_size=0.3相当于测试数据的占比是0.3,而训练数据的占比是0.7,也可以通过下面代码验证

print(x_train.shape,x_test.shape,y_train.shape,y_test.shape)
(105, 4) (45, 4) (105,) (45,)

3.不同k值的模型下分别训练和测试,得出不同k值情况下的模型预测准确性

3.1创建一个1-25的列表

  1. k_range=list(range(1,26))
  2. print(k_range)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]

3.2 分别创建训练数据得分准确率空列表和测试数据得分准确率空列表,用于收遍历循环后的数据

  1. train_score=[]
  2. test_score=[]

3.3 导入建立模型模块和判断准确率模块

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

3.4开始不同的k值遍历循环

  1. for k in k_range:
  2. knn=KNeighborsClassifier(n_neighbors=k)
  3. knn.fit(x_train,y_train)
  4. y_train_predict=knn.predict(x_train)
  5. y_test_predict=knn.predict(x_test)
  6. a=accuracy_score(y_train,y_train_predict)
  7. b=accuracy_score(y_test,y_test_predict)
  8. train_score.append(a)
  9. test_score.append(b)

3.5因为一个模型的评估主要是针对测试数据进行预测的准确率的高低,所以只提取测试数据准确率

  1. for k in k_range:
  2. print(k,test_score[k-1])
1 0.9555555555555556
2 0.9555555555555556
3 0.9555555555555556
4 0.9555555555555556
5 0.9777777777777777
6 0.9555555555555556
7 0.9777777777777777
8 0.9777777777777777
9 0.9777777777777777
10 0.9555555555555556
11 1.0
12 1.0
13 1.0
14 0.9777777777777777
15 1.0
16 1.0
17 1.0
18 0.9555555555555556
19 0.9777777777777777
20 0.9777777777777777
21 1.0
22 0.9555555555555556
23 0.9555555555555556
24 0.9333333333333333
25 0.9555555555555556

4.评估数据图表可视化

4.1导入绘图库模块

import matplotlib.pyplot as plt

4.2设置输出结果参数

%matplotlib inline

4.3开始输出训练准确率图标

  1. plt.plot(k_range,train_score)
  2. plt.xlabel('k_volue')
  3. plt.ylabel('score')

 4.4开始输出测试数据准确率

  1. plt.plot(k_range,test_score)
  2. plt.xlabel('k_volue')
  3. plt.ylabel('score')

从测试数据得分率看出不是k越小或者越大,准确率越高,从图中可以看出整体来说呈现先上升后下降的趋势。

k值越小,模型越过于拟合,越复杂。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/97604
推荐阅读