经历了先前的探索性数据分析、数据清洗与数据重构之后,就可以准备进行模型的搭建和评估了
模型搭建前的工作可以概括为特征工程,主要包括缺失值处理、重复值处理、分类变量编码
一、模型搭建
监督学习:已有的数据集中既有特征(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)
浙公网安备 33010602011771号