python数据拟合第三方库_Python 第三方库Knn算法

(1)neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=1)

n_neighbors:用于指定近邻样本个数K,默认为5

weights:用于指定近邻样本的投票权重,默认为'uniform',表示所有近邻样本的投票权重一样;如果为'distance',则表示投票权重与距离成反比,即近邻样本与未知类别的样本点距离越远,权重越小,反之,权重越大

algorithm:用于指定近邻样本的搜寻算法,如果为'ball_tree',则表示使用球树搜寻法寻找近邻样本;如果为'kd_tree',则表示使用KD树搜寻法寻找近邻样本;如果为'brute',则表示使用暴力搜寻法寻找近邻样本。默认为'auto',表示KNN算法会根据数据特征自动选择最佳的搜寻算法

leaf_size:用于指定球树或KD树叶子节点所包含的最小样本量,它用于控制树的生长条件,会影响树的查询速度,默认为30

metric:用于指定距离的度量指标,默认为闵可夫斯基距离

p:当参数metric为闵可夫斯基距离时,p=1,表示计算点之间的曼哈顿距离;p=2,表示计算点之间的欧氏距离;该参数的默认值为2

metric_params:为metric参数所对应的距离指标添加关键字参数

n_jobs:用于设置KNN算法并行计算所需的CPU数量,默认为1表示仅使用1个CPU运行算法,即不使用并行运算功能

(2)sklearn.model_selection.cross_val_score(estimator,X,y=None,groups=None,scoring=None,cv=’warn’,n_jobs=None,verbose=0,fit_params=None,pre_dispatch=‘2*n_jobs’,error_score=’raise-deprecating’)¶

estimator:训练模型函数

X:用于该模型训练的特征值

y:用于该模型训练的标签值

cv:交叉验证迭代的次数

n_jobs:用于设置交叉验证算法并行计算所需的CPU数量,默认为1表示仅使用1个CPU运行算法,即不使用并行运算功能

(3)train_test_split(test_size,train_size,random_state,shuffle,stratify)

test_size:为int数值时,表示选取样本数量,为浮点型时,便是百分比。

train_size:与test_size参数差不多

random_state:随机生成树的种子,与np.random.random(12)相仿

shuffle:是否进行洗牌操作

stratify:如果shuffle为None,则进行分层标签

二、Knn算法实战(知识接收水平判别)

(1)实验步骤

加载数据并划分为训练集和测试集

交叉验证选取最优K值

将不同K值的得分进行可视化(可选)

将最优K值进行模型训练及混淆矩阵可视化

模型整体准确率及报告输出

(2)代码实现

选取最优K值

1 defdata_set():2 """

3 加载数据并构造训练集和测试集为模型准备4 """

5 #导入第三方库

6 importpandas as pd7 from sklearn importmodel_selection8 #导入数据

9 Knowledge = pd.read_excel(r'Knowledge.xlsx')10 #将数据集拆分为训练集和测试集

11 predictors = Knowledge.columns[:-1] #提取特征名

12 X_train, X_test, y_train, y_test =model_selection.train_test_split(Knowledge[predictors], Knowledge.UNS,13 test_size = 0.25, random_state = 1234)14 return X_train, X_test, y_train, y_test

1 defchoose_bestK(X_train,y_train):2 """选取K值最优解"""

3 #导入第三方库

4 importnumpy as np5 from sklearn importneighbors6 from sklearn importmodel_selection7

8 #设置K值最大值

9 K = np.arange(1,np.ceil(np.log2(Knowledge.shape[0])))10 #构建空列表用于存储平均准确率

11 accureccy =[]12 for k inK:13 #使用10重交叉验证的方法,比对每一个k值下KNN模型的预测准确率

14 cv_result = model_selection.cross_val_score(neighbors.KNeighborsClassifier(n_neighbors=int(k),weights='distance'),15 X_train, y_train, cv = 10, scoring='accuracy')16 accureccy.append(cv_result.mean())17 arg_maxK =np.array(accureccy).argmax()18 return K,accureccy,arg_maxK

1 defvisual(K,accureccy,arg_maxK):2 """对不同K值得分进行可视化"""

3 #导入第三方库

4 importmatplotlib.pyplot as plt5

6 #中文和负号的正常显示

7 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']8 plt.rcParams['axes.unicode_minus'] =False9

10 plt.plot(K,accureccy)11 plt.scatter(K,accureccy)12 plt.text(K[arg_max], accuracy[arg_max], '最佳k值为%s' %int(K[arg_max]))13 #显示图形

14 plt.show()

1 if __name__=='__main__':2 """代码测试"""

3 X_train, X_test, y_train, y_test=data_set()4 K,accureccy,arg_maxK =choose_bestK(X_train,y_train)5 visual(K,accureccy,arg_maxK)

结果:

模型训练并用混淆矩阵可视化

1 defModel_train_predict(K,X_train, y_train,X_test):2 """模型训练及预测"""

3 #导入第三方库

4 from sklearn importneighbors5

6 #重新构建模型,并将最佳的近邻个数设置为6

7 knn_class = neighbors.KNeighborsClassifier(n_neighbors = K, weights = 'distance')8 #模型拟合

9 knn_class.fit(X_train, y_train)10 #模型在测试数据集上的预测

11 predict =knn_class.predict(X_test)12 #构建混淆矩阵

13 cm =pd.crosstab(predict,y_test)14 returncm,predict

1 defConfusion_matrix_hp(cm):2 """构造混淆矩阵热度图"""

3 #导入第三方库

4 from sklearn importmetrics5 importseaborn as sns6

7 #将混淆矩阵构造成数据框,并加上字段名和行名称,用于行或列的含义说明

8 cm =pd.DataFrame(cm)9 #绘制热力图

10 sns.heatmap(cm, annot = True,cmap = 'GnBu')11 #添加x轴和y轴的标签

12 plt.xlabel('Real Lable')13 plt.ylabel('Predict Lable')14 #图形显示

15 plt.show()

1 if __name__=='__main__':2 """代码测试"""

3 X_train, X_test, y_train, y_test=data_set()4 K,accureccy,arg_maxK =choose_bestK(X_train,y_train)5 cm,predict =Model_train_predict(K,X_train, y_train,X_test,y_test)6 Confusion_matrix_hp(cm)

结果:

模型整体准确率及报告输出

1 defscore_report(y_test,predict):2 """模型准确率及报告输出"""

3 #导入第三方模块

4 fromsklearn impmetricsrics5

6 #模型整体的预测准确率

7 total_score=metrics.scorer.accuracy_score(y_test, predict)8 #分类模型的评估报告

9 report =metrics.classification_report(y_test, predict)10 return total_score,report

1 if __name__=='__main__':2

3 """代码测试"""

4 X_train, X_test, y_train, y_test=data_set()5 K,accureccy,arg_maxK =choose_bestK(X_train,y_train)6 cm,predict =Model_train_predict(K,X_train, y_train,X_test,y_test)7 total_score,report =score_report(y_test,predict)8 print(total_score,"\n",report)

结果:

借鉴:《从零开始学Python数据分析与挖掘》 PPT

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值