模型搭建
模型搭建
- 处理完前面的数据我们就得到建模数据,下一步是选择合适模型
- 在进行模型选择之前我们需要先知道数据集最终是进行监督学习还是无监督学习
- 除了根据我们任务来选择模型外,还可以根据数据样本量以及特征的稀疏性来决定
- 刚开始我们总是先尝试使用一个基本的模型来作为其baseline,进而再训练其他模型做对比,最终选择泛化能
力或性能比较好的模型
模型创建 - 创建基于线性模型的分类模型(逻辑回归)
- 创建基于树的分类模型(决策树、随机森林)
- 查看模型的参数,并更改参数值,观察模型变化
.提示 - 逻辑回归不是回归模型而是分类模型,不要与 LinearRegression 混淆
- 随机森林其实是决策树集成为了降低决策树过拟合的情况
- 线性模型所在的模块为 sklearn.linear_model
- 树模型所在的模块为 sklearn.ensemble
** 切割训练集与测试集**
from sklearn.model_selection import train_test_split
X = data.drop(['Survived'],axis=1)
print(data.shape,X.shape)
y = data['Survived']
(891, 19) (891, 18)
# 数据集切割
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# 划分比例默认为0.25
逻辑回归模型
# 逻辑回归
from sklearn.linear_model import LogisticRegression
# 默认参数下拟合模型
lr = LogisticRegression()
lr.fit(X_train, y_train)
# 查看训练集和测试集score值
print("训练集score:{:.2f}".format(lr.score(X_train, y_train)))
print("测试集score: {:.2f}".format(lr.score(X_test, y_test)))
# str.format()格式化,在这里输出score结果的两位小数的值
随机森林模型
# 随机森林模型
# 调整参数后的随机森林分类模型
from sklearn.ensemble import RandomForestClassifier
rfc2 = RandomForestClassifier(n_estimators=100, max_depth=5)
rfc2.fit(X_train, y_train)
print("Training set score: {:.2f}".format(rfc2.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(rfc2.score(X_test, y_test)))
模型评估
模型评估是为了明确模型的泛化能力。
交叉验证(cross-validation)是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。数据被多次划分,并且需要训练多个模型。最常用的是 k 折交叉验证(k-fold cross-validation), k 通常取 5 或 10。
准确率(precision)度量的是被预测为正例的样本中有多少是真正的正例
召回率(recall)度量的是正类样本中有多少被预测为正类
f-分数是准确率与召回率的调和平均
ROC曲线
ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线”。
ROC的全称是Receiver Operating Characteristic Curve,中文名字叫“受试者工作特征曲线”。
roc_curve:
roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)
y_true:数组,存储数据的标签,维度是样本数,两个值(只适用于二分类任务)
y_score:数组,存储数据的预测概率值,维度也是样本数
pos_label:整型或字符串,指定正样本是哪个
sample_weight:采样权重,可选参数
drop_intermediate:丢掉一些阈值,以便画roc曲线图
返回值:
fpr
tpr
thresholds:数组,对预测值排序后的score列表,作为阈值,排序从大到小