经历了先前的探索性数据分析、数据清洗与数据重构之后,就可以准备进行模型的搭建和评估了

模型搭建前的工作可以概括为特征工程,主要包括缺失值处理、重复值处理、分类变量编码

一、模型搭建

监督学习:已有的数据集中既有特征(feature)又有标签(label),通过训练,让机器/程序可找到特征和标签之间的联系。

无监督学习:不知道数据集中数据、特征之间的关系,而是要根据聚类或一定的模型得到数据之间的关系

 

选择模型的依据:任务;数据样本量;特征的稀疏性

会创建多个模型,经比较,选择performance更多的那个模型

1.1 切分训练与测试集

# 使用sklearn中的train_test_split

from sklearn.model_selection import train_test_split
X = data_feavar
y = data_aimvar
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0) 
# random_state设置随机种子,以便复现结果;stratify可使得数据划分前后各类的分布/比例保持一致 ;默认划分训练集0.75,测试集0.25

1.2 创建模型

ML中有多种模型,选择好模型之后会进行调参,选择效果最优的模型

以logistic回归为例。该模型的自变量\特征为连续变量,因变量\标签为类别变量

衡量模拟拟合

from sklearn.linear_model import LogisticRegression

model1=LogisticRegression() # 创建一个模型对象
model1.fit(X_train, y_train) # 拟合训练数据,得到模型
model.score(X_train, y_train) # 训练数据的拟合效果,R方
model.score(X_test, y_test) # 测试数据的拟合效果,R方

1.3 输出模型预测结果

以logistic回归为例,该模型实际上得到各类别的预测概率,然后选择概率大者为所预测的类别

pred =model1.predict(X_train) # 训练数据的预测结果,为标签
pred_proba = model1.predict_proba(X_train) # 为概率

二、模型评估

模型评估是为了了解模型的泛化能力。当获得了模型之后,我们需要了解此模型面对陌生数据时的表现,这可以通过测试数据来进行了解

2.1 交叉验证

其中,交叉验证是一种评估方法,将模型分为n份,每次随机选择n-1份为训练数据,1份为测试数据,共拟合n次

from sklearn.model_selection import cross_val_score

model1 = LogisticRegression(C=100) # 创建模型
scores = cross_val_score(model1, X_train, y_train, cv=10) # 交叉验证

2.2 混淆矩阵

该概念等效于心理物理中的信号检测论,包含击中、虚报、漏报、正确否定(表述不一)。ROC曲线也一样

击中率(准确率):  实际为真/报告为真

召回率:报告为真/实际为真

from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report

# 混淆矩阵
confusion_matrix(y_train, pred)

# 精确率、召回率以及f1-score
classification_report(y_train, pred)

2.3 ROC曲线

ROC曲线为在不同判断标准下所绘制的曲线

from sklearn.metrics import roc_curve

fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(X_test))

 

参考链接:

1.小白都看得懂的监督学习与无监督学习 - 简书 (jianshu.com)

2.sklearn的train_test_split()各函数参数含义解释(非常全) - The-Chosen-One - 博客园 (cnblogs.com)

 

posted on 2021-12-15 20:34  宝joM  阅读(388)  评论(0)    收藏  举报