动手学数据分析—Task5

模型建立和评估

处理完前面的数据我们就得到建模数据,下一步是选择合适模型,在进行模型选择之前我们需要先知道数据集最终是进行监督学习还是无监督学习

切割训练集和测试集

  1. 按比例切割训练集和测试集(一般测试集的比例有30%、25%、20%、15%和10%)
  2. 按目标变量分层进行等比切割
  3. 按目标变量分层进行等比切割
from sklearn.model_selection import train_test_split
X = data
y = train['Survived']
# 对数据集进行切割
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0) 

模型创建

  1. 创建基于线性模型的分类模型(逻辑回归)
  2. 创建基于树的分类模型(决策树、随机森林)
  3. 查看模型的参数,并更改参数值,观察模型变化
# 逻辑回归
from sklearn.linear_model import LogisticRegression
# 随机森林
from sklearn.ensemble import RandomForestClassifier

逻辑回归

# 默认参数逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)

随机森林

rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)

预测结果

pred = lr.predict(X_train)

预测标签的概率

pred_proba = lr.predict_proba(X_train)

模型评估

模型评估是为了知道模型的泛化能力。

  1. 用10折交叉验证来评估逻辑回归模型
  2. 计算交叉验证精度的平均值

交叉验证

用10折交叉验证来评估逻辑回归模型

from sklearn.model_selection import cross_val_score
lr = LogisticRegression(C=100)
scores = cross_val_score(lr, X_train, y_train, cv=10)

混淆矩阵

计算精确率、召回率以及f-分数

from sklearn.metrics import confusion_matrix
lr = LogisticRegression(C=100)
lr.fit(X_train, y_train)
pred = lr.predict(X_train)
confusion_matrix(y_train, pred)
from sklearn.metrics import classification_report
classification_report(y_train, pred)

ROC曲线

可以很容易地查出一个分类器在某个阈值时对样本的识别能力。可以借助ROC曲线选择出某一诊断方法最佳的诊断界限值。ROC曲线越是靠近左上角,试验的FPR越高和FPR越低,即灵敏度越高,误判率越低,则诊断方法的性能越好。

from sklearn.metrics import roc_curve
fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(X_test))
plt.plot(fpr, tpr, label="ROC Curve")
plt.xlabel("FPR")
plt.ylabel("TPR (recall)")
# 找到最接近于0的阈值
close_zero = np.argmin(np.abs(thresholds))
plt.plot(fpr[close_zero], tpr[close_zero], 'o', markersize=10, label="threshold zero", fillstyle="none", c='k', mew=2)
plt.legend(loc=4)
浙ICP备19012682号