2022年01月22日整理发布:简介Python的sklearn机器学习算法

2023-08-02 16:30:12 来源:互联网

免费学习推荐:python视频教程


(资料图)

导入必要的通用模块

导入熊猫作为PD导入matplotlib。pyplot as PLT import OS import numpy as NP import copy import remortmath——机器学习的通用框架:以knn为例

#有相邻点的训练数据不适合从Sklearn.model _ selection导入train _ test _ split #将数据从SKlearn . neighborslasclasser导入到测试集和训练集中#有相邻点的训练数据# 1。read data=pd.read_excel("数据/样本数据。xlsx")#2。标准化来自用于colindata的sklearn导入预处理的数据。columns [2:] : #为了不破坏数据集中的离散变量,只标准化10个以上数值类型的连续变量。

if len(set(data[col])10:

数据[col]=预处理。比例(数据[col]) # 3。构造自变量和因变量,并将其分为训练集和测试集x=数据[[月_收入],[教育_结果],[关系_结果],[娱乐_结果],[流量]

express_distance "," satisfac "," wifi_neghbor "," wifi_relative "," wifi_frend "," internet "]]Y=data[" wifi "]X _ train,X_test,y_train,Y _ test=train_test_split (x,Y,test_size=0.3) #使用train_test_split将训练集与测试集分开。Test _ size占30%#4。模型拟合模型=Kneighberslassifier #介绍训练方法model.fit(X_train,Y_train)#填写测试数据训练Y _ predict=model。predict (x _ test) #利用测试集数据进行预测#修改预测结果Proba=模型。predict _ proba (x _ test) #根据每个测试集样本#5的预测结果返回0和1的概率值。模型评价# (1)测试集样本数据拟合优度模型。分数(x,y)模型。score (x _ test,y _ test) # (2)构造混淆矩阵判断预测精度"""

混淆矩阵中的行代表真实值,列代表预测值。

TN:实际为0,预测数为0,FP:实际为0,预测数为1。

FN:实际上是1,预测的数字是0,TP:实际上是1,预测的数字是1

精度=TP/(TP FP) ——预测样本的预测精度为1。

召回率召回率=TP/(TP FN)——实际样本的正确预测率为1。

来自sklearn.metrics导入混淆矩阵的“”

CFM=混乱_矩阵(y _ test,y _ predict) PLT。matshow(CMAP CFM=PLT。厘米。灰色)# CMAP参数是绘图矩阵的颜色集。Gray plt.show#(3)准确性和召回率在sklearn中使用。度量导入精度_分数,召回_

Precision _ score (y _ test,y _ predict) #准确率召回_ score (y _ test,y _ predict) #召回率#(4)错误率矩阵row _ sums=NP。总和(CFM,轴=1)误差矩阵=CFM/行总和

NP。Fill _对角线(err_matrix,0) #将ERR _ matrix的对角线设置为0,因为这是预测的正确部分,不要在意PLT。Matshow (ERR _ matrix,CMAP=PLT。CM。灰色)#亮度越高,出错率越高。plt.show II数据处理。

#1.从sklearn导入da构建数据集

tasets#引入数据集#n_samples为生成样本的数量n_features为X中自变量的个数n_targets为y中因变量的个数bias表示使线性模型发生偏差的程度X,y=datasets.make_regression(n_samples=100,n_features=1,n_targets=1,noise=1,bias=0.5,tail_strength=0.1)plt.figure(figsize=(12,12))plt.scatter(X,y)#2.读取数据data=pd.read_excel("数据/样本数据.xlsx")#3.将数据标准化——preprocessing.scale(data)from sklearn import preprocessing#为了不破坏数据集中的离散变量只将数值种类数高于10的连续变量标准化for col in data.columns[2:]: if len(set(data[col]))>10: data[col]=preprocessing.scale(data[col])

三 回归

1.普通最小二乘线性回归

import numpy as npfrom sklearn.linear_model import LinearRegressionfrom sklearn.model_selection import train_test_splitX=data[["work", "work_time", "work_salary", "work_address", "worker_number", "month_income", "total_area", "own_area", "rend_area", "out_area", "agricultal_income", "things", "wifi", "internet_fee", "cloth_outcome", "education_outcome", "medcine_outcome", "person_medicne_outcome", "relationship_outcome", "food_outcome", "entertainment_outcome", "agriculta_outcome", "other_outcome", "owe", "owe_total", "debt", "debt_way", "distance_debt", "distance_market", "traffic_", "express", "express_distance", "exercise", "satisfac", "wifi_neghbor", "wifi_relative", "wifi_frend", "internet", "medical_insurance"]]y=data["total_income"]model=LinearRegression.fit(X,y)#拟合模型model.score(X,y)#拟合优度model.coef_#查看拟合系数model.intercept_#查看拟合截距项model.predict(np.array(X.ix[25,:]).reshape(1,-1))#预测model.get_params#得到模型的参数

2.逻辑回归Logit

from sklearn.linear_model import LogisticRegression#2.1数据处理X=data[["month_income", "education_outcome","relationship_outcome", "entertainment_outcome","traffic_", "express", "express_distance","satisfac", "wifi_neghbor","wifi_relative", "wifi_frend", "internet"]]y=data["wifi"]X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)#利用train_test_split进行将训练集和测试集进行分开test_size占30%#2.2模型拟合model = LogisticRegressionmodel.fit(X_train,y_train)model.score(X_test,y_test)#2.3模型预测y_predict = model.predict(X_test)#2.4通过调整判别分数标准来调整判别结果decsion_scores = model.decision_function(X_test)#用于决定预测值取值的判别分数y_predict = decsion_scores>=5.0#将判别分数标准调整为5#2.5通过 精准率——召回率曲线图 寻找最优判别标准#由于随着判别标准的变化精确率和召回率此消彼长因此需要寻找一个最佳的判别标准使得精准率和召回率尽可能大from sklearn.metrics import precision_recall_curveprecisions,recalls,thresholds = precision_recall_curve(y_test,decsion_scores)#thresholds表示所有可能得判别标准即判别分数最大与最小值之间的范围#由于precisions和recalls中比thresholds多了一个元素因此要绘制曲线先去掉这个元素plt.plot(thresholds,precisions[:-1])plt.plot(thresholds,recalls[:-1])plt.showy_predict = decsion_scores>=2#根据上图显示两线交于-0.3处因此将判别分数标准调整为-0.3#2.6绘制ROC曲线:用于描述TPR和FPR之间的关系ROC曲线围成的面积越大说明模型越好"""TPR即是召回率_越大越好FPR=(FP)/(TN+FP)_越小越好"""from sklearn.metrics import roc_curvefprs,tprs,thresholds = roc_curve(y_test,decsion_scores)plt.plot(fprs,tprs)plt.show#2.7绘制混淆矩阵from sklearn.metrics import confusion_matrix,precision_score,recall_scorecfm =confusion_matrix(y_test, y_predict)# 构建混淆矩阵并绘制混淆矩阵热力图plt.matshow(cfm,cmap=plt.cm.gray)#cmap参数为绘制矩阵的颜色集合这里使用灰度plt.showprecision_score(y_test, y_predict)# 精准率recall_score(y_test, y_predict)#召回率

四 模型评价

#1.混淆矩阵精准率和召回率from sklearn.metrics import confusion_matrix,precision_score,recall_score"""混淆矩阵中行代表真实值列代表预测值TN:实际为0预测为0的个数 FP:实际为0预测为1的个数FN:实际为1预测为0的个数 TP:实际为1预测为1的个数精准率precision=TP/(TP+FP)——被预测为1的样本的的预测正确率召回率recall=TP/(TP+FN)——实际为1的样本的正确预测率"""cfm =confusion_matrix(y_test, y_predict)# 构建混淆矩阵并绘制混淆矩阵热力图plt.matshow(cfm,cmap=plt.cm.gray)#cmap参数为绘制矩阵的颜色集合这里使用灰度plt.showprecision_score(y_test, y_predict)# 精准率recall_score(y_test, y_predict)#召回率#2.精准率和召回率作图:由于精准率和召回率此消彼长应当选择适当的参数使二者同时尽可能的大#3.调和平均值"""精准率和召回率的调和平均值"""from sklearn.metrics import f1_scoref1_score(y_test,y_predict)#4.错误率矩阵row_sums = np.sum(cfm,axis=1)err_matrix = cfm/row_sumsnp.fill_diagonal(err_matrix,0)#对err_matrix矩阵的对角线置0因为这是预测正确的部分不关心plt.matshow(err_matrix,cmap=plt.cm.gray)#亮度越高的地方代表错误率越高plt.show

大量免费学习推荐敬请访问python教程(视频)

以上就是简介Python的sklearn机器学习算法的详细内容!

来源:php中文网

标签:

上一篇:朱文龙(对于朱文龙简单介绍)
下一篇:最后一页