机器学习之选择小样本交叉验证训练模型并使用精确率、召回率、F1分数和AUC值、画出ROC曲线评估

题目如下

(1)读入aviation数据集,设置MEMBER_NO为索引列;(4分)
(2)剔除重复值、缺失值。(4分)
(3)随机抽取500样本,切片特征X和标签Y;(4分) 因为调参很慢,所以这里的操作是想在小数据集上调参
(4)使用交叉验证方法(10折)
比较逻辑回归、决策树算法性能差异,评估指标用F1分数(5分)
(5)使用网格搜索对上题中F1分数较高的算法进行超参数调优。(4分)
(6)使用4、5中确定的最优算法和最优参数建立模型。(4分)
(7)按照6:4划分整个数据集(样本总体)。(4分)
(8)使用训练集数据进行模型训练,对测试集数据进行预测,打印混淆矩阵。(4分)
(9)打印精确率、召回率、F1分数和AUC值、画出ROC曲线。(5分)

题目分析

  • 我们拿到一个非常大的数据集以后,在训练模型时,要想到拿其中的一部分样本来训练,这样的速度比较快
  • 在读取数据的时候,可以直接对缺失值进行填充
  • 读取数据以后可以删除缺失的数据
  • 在训练时,不知道使用哪个模型更佳的情况下,多使用几个模型,进行交叉验证评估,选择得分最高的算法
  • 选好算法以后,使用表格选择器,进行模型参数调优,选出最优的参数
  • 使用最优参数建立最优模型
  • 模型训练
  • 对训练好的模型进行评估

代码如下

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体和负号正确显示
plt.rcParams["font.sans-serif"]=["SimHei"]
plt.rcParams["axes.unicode_minus"]=False
# 数据切分器
from sklearn.model_selection import train_test_split
# 决策树分类器
from sklearn.tree import DecisionTreeClassifier
# 逻辑回归分类器
from sklearn.linear_model import LogisticRegression
# 交叉验证评估器
from sklearn.model_selection import cross_val_score
# 表格查找最优模型器
from sklearn.model_selection import GridSearchCV
# 模型评估指标
from sklearn.metrics import f1_score,classification_report,confusion_matrix
# 模型评估指标
from sklearn.metrics import precision_score,recall_score,roc_auc_score,roc_curve
# 忽略多余的警告
import warnings
warnings.filterwarnings('ignore')

# (1)读入aviation数据集,设置MEMBER_NO为索引列;(4分)
data=pd.read_excel("../datas/aviation.xls",index_col="MEMBER_NO")

# (2)剔除重复值、缺失值。(4分)
data.drop_duplicates(inplace=True)
data.dropna(inplace=True)

# (3)随机抽取500样本,切片特征X和标签Y;(4分)  因为调参很慢,所以这里的操作是想在小数据集上调参
data=data.sample(500)
X=data.iloc[:,:-1]
Y=data.iloc[:,-1]

# (4)使用交叉验证方法(10折)
# 比较逻辑回归、决策树算法性能差异,评估指标用F1分数(5分)
Log=LogisticRegression()
DT=DecisionTreeClassifier()
model1=cross_val_score(Log,X,Y,scoring="f1",cv=10)
model2=cross_val_score(DT,X,Y,scoring="f1",cv=10)
print('model1:\n',np.mean(model1))
print('model2:\n',np.mean(model2))

# (5)使用网格搜索对上题中F1分数较高的算法进行超参数调优。(4分)
param1={
    "C":[0.1,1,10,100,200],
    "max_iter":[1,10,50,100,200]
}
# 表格选择器对逻辑回归模型选择最优参数
searchmodel1=GridSearchCV(Log,param_grid=param1,cv=2).fit(X,Y)
print(searchmodel1.best_params_)
print(searchmodel1.best_score_*100,"%")

param2={
    "max_depth":[0.1,1,10,50,100],
    "min_samples_leaf":[1,10,50,100,200]
}
# 表格选择器对决策树模型选择最优参数
searchmodel2=GridSearchCV(DT,param_grid=param2).fit(X,Y)
print(searchmodel2.best_params_)
print(searchmodel2.best_score_*100,"%")

# (6)使用4、5中确定的最优算法和最优参数建立模型。(4分)
model=LogisticRegression(C=searchmodel1.best_params_.get("C"),max_iter=100)

# (7)按照6:4划分整个数据集(样本总体)。(4分)
X_train,X_test,Y_train,Y_test=train_test_split(X,Y,test_size=0.4,random_state=3)

# (8)使用训练集数据进行模型训练,对测试集数据进行预测,打印混淆矩阵。(4分)
model.fit(X_train,Y_train)
pred=model.predict(X_test)
preds=model.predict_proba(X_test)

print("混淆矩阵:\n",confusion_matrix(Y_test,pred))

# (9)打印精确率、召回率、F1分数和AUC值、画出ROC曲线。(5分)
print("精确率:%.2f"%(precision_score(Y_test,pred)*100),"%")
print("召回率:%.2f"%(recall_score(Y_test,pred)*100),"%")
print("F1-Score:%.2f"%(f1_score(Y_test,pred)*100),"%")
print("AUC:%.2f"%(roc_auc_score(Y_test,preds[:,-1])*100),"%")

TPR,FPR,TH=roc_curve(Y_test,preds[:,-1],)

# 画图
plt.title("ROC曲线")
plt.plot(TPR,FPR)
plt.xlabel("FPR")
plt.ylabel("TPR")
plt.show()

结果如下

机器学习之选择小样本交叉验证训练模型并使用精确率、召回率、F1分数和AUC值、画出ROC曲线评估_第1张图片

画图如下

机器学习之选择小样本交叉验证训练模型并使用精确率、召回率、F1分数和AUC值、画出ROC曲线评估_第2张图片

你可能感兴趣的:(机器学习算法思想及代码实现,机器学习,交叉验证,模型评估指标)