【决策树andKNN】——实现手写数字的识别

测试两个算法应用到同一个测试集上的表现以及对参数的调整

1.数据加载

from sklearn.datasets import load_digits
data = load_digits()
X,y=data.data,data.target  #y为数据的实际值  

2.可视化表示

f,axes = plt.subplots(1,4,sharey=True,figsize(16,6))
for i in range(4):
	axes[i].imshow(X[i,:].reshape([8,8]),cmap='Greys')  #画出前个数字图像

在这里插入图片描述
3.划分数据集合留置集

X_train, X_holdout, y_train, y_holdout = train_test_split(
    X, y, test_size=0.3, random_state=17) #7:3

4.使用随机参数训练决策树和KNN

tree = DecisionTreeClassifier(max_depth=5, random_state=17)  #深度为5
knn_pipe = Pipeline([('scaler', StandardScaler()),   #StandardScaler数据归一化
                     ('knn', KNeighborsClassifier(n_neighbors=10))])

tree.fit(X_train, y_train)  #决策树开始训练,y_train为数值标签
knn_pipe.fit(X_train, y_train)

5.开始预测

tree_pred = tree.predict(X_holdout)     #在决策树上预测
knn_pred = knn_pipe.predict(X_holdout)  #KNN上预测
accuracy_score(y_holdout, knn_pred),accuracy_score(y_holdout, tree_pred)  #KNN上的正确率:0.976, 决策树上的正确率:0.666)

在这里插入图片描述

6.由上面的结果可知,KNN的效果更好,但是设置的是随机参数。现在使用交叉验证调优解决决策树模型

tree_params = {'max_depth': [10, 20, 30],   #将这三个深度拿到模型中训练,找到分类情况最好的那一个
               'max_features': [30, 50, 64]}

tree_grid = GridSearchCV(tree, tree_params,    #tree ->模型名 tree_paramas+>训练的参数,n_jobs->并行数,这里-1代表和CPU统一
                         cv=5, n_jobs=-1, verbose=True)  #verbose=True  日志跟踪,cv->验证折数

tree_grid.fit(X_train, y_train)

7.查看交叉验证得到的最佳参数组合和相应的准确率

tree_grid.best_params_, tree_grid.best_score_

>>({'max_depth': 10, 'max_features': 50}, 准确率:0.8568203376968316)

8.对KNN进行交叉验证

np.mean(cross_val_score(KNeighborsClassifier(
    n_neighbors=1), X_train, y_train, cv=5))
>> 0.98648680282

7.在这一数据集上训练随机森林模型,在大多数数据集上,随机森林的效果比 KNN好

np.mean(cross_val_score(RandomForestClassifier(
    random_state=17), X_train, y_train, cv=5))
    >>0.9753456

但是从这个数据集中,随机森林的准确率不如KNN的高,

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值