机器学习入门之分类、决策树、随机森林、KNN、SVM、分类、AUC、准确率、平均准确率、召回率、F1
发布日期:2022-03-09 00:49:09 浏览次数:56 分类:技术文章

本文共 5900 字,大约阅读时间需要 19 分钟。

文章目录


前言

前言:这篇

提示:以下是本篇文章正文内容,下面案例可供参考

机器学习入门之分类

"""全局数据集"""from sklearn.datasets import make_blobs,make_moonsimport matplotlib.pyplot as pltimport numpy as np%matplotlib inlineX,Y = make_moons(n_samples=100,noise = 0.1,random_state=0)plt.scatter(X[:,0],X[:,1],c=Y)plt.show()

在这里插入图片描述

一、决策树(DecisionTree)

1、决策树拟合

#Decisiontree#决策树from sklearn import treemodel = tree.DecisionTreeClassifier()model.fit(x_train,y_train)print('test score',model.score(x_test,y_test))x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1#生成矩阵坐标x,y  返回np.arange类型的列表xx, yy = np.meshgrid(np.arange(x_min, x_max, .02),np.arange(y_min, y_max, .02))                    '''np.c_:是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等shape是查看数据有多少行多少列reshape更改数组维数'''z = model.predict(np.c_[xx.ravel(), yy.ravel()])                       z = z.reshape(xx.shape)  plt.pcolormesh(xx, yy, z.reshape(xx.shape), shading='auto', cmap= 'Paired')plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.spring, edgecolors='k')plt.show()

在这里插入图片描述在这里插入图片描述

2、决策树 准确率 平均准确率 召回率 F1 AUC

from sklearn import treefrom sklearn.metrics import accuracy_score  #准确率from sklearn.metrics import precision_score  #精确率from sklearn.metrics import recall_score #召回率from sklearn.metrics import f1_score  #f1_scorefrom sklearn.metrics import roc_auc_score    #AUC    model=tree.DecisionTreeClassifier(random_state=0)model.fit(x_train,y_train)y_true = y_testy_pred = model.predict(x_test)y_pro = model.predict_proba(x_test)i = '决策树'print(f'{i}  Accuracy:',accuracy_score(y_true,y_pred))print(f'{i}  Precison:',precision_score(y_true,y_pred))print(f'{i}  Recall  :',recall_score(y_true,y_pred))print(f'{i}  F1      :',f1_score(y_true,y_pred))# print(f'{i}  AUC     :',roc_auc_score(y_true,y_pro[:,1]) )print(f'{i}  Auc',roc_auc_score(y_true,y_pro[:,1]))

在这里插入图片描述

二、随机森林(RandomFrorest)

1、随机森林拟合

from sklearn.ensemble import RandomForestClassifierfrom sklearn.model_selection import cross_val_score# from sklearn.model_selection import train_test_splitrfc = RandomForestClassifier()score = cross_val_score(rfc, X, Y, cv=10).mean()print('默认参数随机森林得分',score)# 调参,绘制学习曲线来调参n_estimators(对随机森林影响较大大)score_lt = []# 每隔10步建立一个随机森林,获得不同n_estimators的得分for i in range(0,100,10):    rfc = RandomForestClassifier(n_estimators=i+1,random_state=0)    score = cross_val_score(rfc, X,Y, cv=10).mean()    score_lt.append(score)score_max = max(score_lt)print('更改参数后最大得分:{}'.format(score_max),'子树数量为:{}'.format(score_lt.index(score_max)*10+2))# 绘制学习曲线x = np.arange(1,101,10)plt.subplot(111)plt.plot(x, score_lt, 'r-')plt.show()

随机森林算法比较强大,即使是在默认参数下,你也能获得很高的分数

在这里插入图片描述


从上述代码我们发现,在随机森林模型默认参数情况下使用交叉验证得分为0.97在进行n_emitmators参数调优后,达到了0.97的评分最优参数为: 42
#将随机森林字数设为42rfc = RandomForestClassifier(n_estimators=42, random_state=0)rfc.fit(X,Y)score = cross_val_score(rfc, X, Y, cv=10).mean()print(score)x_min,x_max = np.min(X[:,0]-1),np.max(X[:,0]+1)y_min,y_max = np.min(X[:,1]-1),np.max(X[:,1]+1)xx,yy = np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))z = rfc.predict(np.vstack((xx.ravel(), yy.ravel())).transpose())z = z.reshape(xx.shape)plt.subplot(111)plt.pcolormesh(xx, yy, z.reshape(xx.shape), shading='auto', cmap='Accent')plt.scatter(X[:, 0], X[:, 1], c=Y, cmap=plt.cm.spring, edgecolors='k')plt.show()

在这里插入图片描述

2、准确率 平均准确率 召回率 F1 AUC

from sklearn.metrics import accuracy_score  #准确率from sklearn.metrics import precision_score  #精确率from sklearn.metrics import recall_score #召回率from sklearn.metrics import f1_score  #f1_scorefrom sklearn.metrics import auc    #AUC    model=RandomForestClassifier(random_state=0)model.fit(x_train,y_train)y_true = y_testy_pred = model.predict(x_test)y_pro = model.predict_proba(x_test)i = '随机森林'print(f'{i}  Accuracy:',accuracy_score(y_true,y_pred))print(f'{i}  Precison:',precision_score(y_true,y_pred))print(f'{i}  Recall  :',recall_score(y_true,y_pred))print(f'{i}  F1      :', f1_score(y_true,y_pred))print(f'{i}  Auc',roc_auc_score(y_true,y_pro[:,1]))

三、KNN(KNeighborsClassifier)

1、KNN拟合

#KNNfrom sklearn.neighbors import KNeighborsClassifierknn = KNeighborsClassifier()knn.fit(x_train,y_train)print('test score:',knn.score(x_test,y_test))x_min, x_max = X[:,0].min()-1,X[:,0].max()+1y_min, y_max = X[:,1].min()-1,X[:,1].max()+1xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))z = knn.predict(np.c_[xx.ravel(),yy.ravel()])  z = z.reshape(xx.shape)plt.pcolormesh(xx,yy,z.reshape(xx.shape),shading='auto',cmap='Set3')plt.scatter(X[:,0],X[:,1],c=Y,cmap=plt.cm.rainbow,edgecolors='k')plt.show()

在这里插入图片描述

2、准确率 平均准确率 召回率 F1 AUC

model=KNeighborsClassifier()model.fit(x_train,y_train)y_true = y_testy_pred = model.predict(x_test)y_pro = model.predict_proba(x_test)i = 'KNN'print(f'{i}  Accuracy:',accuracy_score(y_true,y_pred))print(f'{i}  Precison:',precision_score(y_true,y_pred))print(f'{i}  Recall  :',recall_score(y_true,y_pred))print(f'{i}  F1      :', f1_score(y_true,y_pred))print(f'{i}  Auc',roc_auc_score(y_true,y_pro[:,1]))

在这里插入图片描述

四、SVM(SVC)

1、SVM拟合

#SVCfrom sklearn.svm import SVC# for i in range(0,10,1):model = SVC(gamma=9)model.fit(x_train,y_train)print('test score:',model.score(x_test,y_test))x_min, x_max = X[:,0].min()-1,X[:,0].max()+1y_min, y_max = X[:,1].min()-1,X[:,1].max()+1xx,yy=np.meshgrid(np.arange(x_min,x_max,.02),np.arange(y_min,y_max,.02))z = model.predict(np.c_[xx.ravel(),yy.ravel()])  z = z.reshape(xx.shape)plt.pcolormesh(xx,yy,z.reshape(xx.shape),shading='auto',cmap='Set2')plt.scatter(X[:,0],X[:,1],c=Y,cmap=plt.cm.rainbow,edgecolors='k')plt.show()

在这里插入图片描述

2、准确率 平均准确率 召回率 F1 AUC

model=SVC(gamma=9,probability=True)model.fit(x_train,y_train)y_true = y_testy_pred = model.predict(x_test)y_pro = model.predict_proba(x_test)i = 'SVM'print(f'{i}  Accuracy:',accuracy_score(y_true,y_pred))print(f'{i}  Precison:',precision_score(y_true,y_pred))print(f'{i}  Recall  :',recall_score(y_true,y_pred))print(f'{i}  F1      :', f1_score(y_true,y_pred))print(f'{i}  Auc',roc_auc_score(y_true,y_pro[:,1]))

在这里插入图片描述


留言

以上代码仅供学习参考使用,由于个人代码水平不足,有的错误可以指出,便于修改。

转载地址:https://blog.csdn.net/m0_56636466/article/details/121502770 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:[AcWing]Java——快速排序
下一篇:2021-04-02

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月28日 05时18分00秒