| 我们采用sklearn这个库来进行建模和评估 1.分割训练集和测试集先来简单介绍一下数据分割的函数:train_test_split,资料来源于sklearn的官方文档 X_train,X_test,y_train,y_test=
sklearn.model_selection.train_test_split(train_data,train_target, test_size=None,train_size=None, random_state=None, shuffle=True, stratify=None)
 参数:train_data:待划分的样本特征集合 train_target:待划分的样本标签 **test_size:**输入在0-1间表示测试集的样本比例,输入整数表示测试集样本数目 train_size:输入0-1间表示要包含在训练拆分中的数据集的比例,整数表示样本的数目 **random_state:**随机种子,即划分标记 **shuffle:**是否打乱数据顺序再划分,默认True **stratify:**表示按指定列进行分层采样 返回值:**X_train:**划分出的训练集数据 **X_test:**划分出的测试集数据 **y_train:**划分出的训练集标签 **y_test:**划分出的测试集标签 from sklearn.model_selection import train_test_split
data=pd.read_csv(r'C:\Users\45168\Desktop\hands-on-data-analysis-master\第三章项目集合\clear_data.csv')
train=pd.read_csv(r'C:\Users\45168\Desktop\hands-on-data-analysis-master\第三章项目集合\train.csv')
X=data
y=train['Survived']
 X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
 2.模型建立具体各个模型的参数及使用方法不详细介绍,这里只是作为数据分析的步骤进行演示。 逻辑斯蒂回归默认参数使用逻辑斯蒂回归:from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
lr = LogisticRegression() 
lr.fit(X_train, y_train)
print("Training set score: {:.2f}".format(lr.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr.score(X_test, y_test)))
 带参数:lr2 = LogisticRegression(C=100)
lr2.fit(X_train, y_train)
print("Training set score: {:.2f}".format(lr2.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(lr2.score(X_test, y_test)))
 随机森林分类:默认参数:rfc = RandomForestClassifier()
rfc.fit(X_train, y_train)
print("Training set score: {:.2f}".format(rfc.score(X_train, y_train)))
print("Testing set score: {:.2f}".format(rfc.score(X_test, y_test)))
 带参数: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)))
 3.预测结果pred = lr.predict(X_train)
pred
 可以看到pred是一个数组,且里面的元素都是0,1构成的 接下来我们查看预测标签的概率: pred_proba = lr.predict_proba(X_train)
pred_proba
 4.模型评估建模之后,我们往往需要对模型进行评估。模型评估的目的是了解模型的泛化性能,简单来说就是模型的解释性是否满足要求。 模型评估常用的一种技术叫做K折交叉验证,K是用户指定的数字,通常取5或者10。交叉验证的意思就是把原始数据集分成训练集和测试集,我们利用训练集进行模型训练,利用测试集来评估模型的性能。 下面介绍几个术语: 准确率(precision):度量的是被预测为正例的样本中有多少是真正的正例召回率(recall):度量的是正类样本中有多少被预测为正类f-分数是准确率与召回率的调和平均
 
4.1 交叉验证
from sklearn.model_selection import cross_val_score
lr = LogisticRegression(C=100)
scores = cross_val_score(lr, X_train, y_train, cv=10)
scores
 注意:K值的选取不是越大越好,具体情况要具体分析,在2017年的一项研究中给出了如下经验公式: K=ln(n),且n/K>3d,n是数据量,d是特征数。 这里是论文:Jung, Y., 2017. Multiple predicting K-fold cross-validation for model selection. Journal of Nonparametric Statistics, pp.1-19. 4.2 混淆矩阵这里简单介绍一下二分类问题的混淆矩阵 二分类矩阵如下构成: 
 TP = True Postive = 真阳性 FP = False Positive = 假阳性 FN = False Negative = 假阴性 TN = True Negative = 真阴性 比如: 真实值:0 1 0 0 1 1 预测值:0 1 1 1 0 1 则TP=2,FN=1,FP=2,TN=1 ● 精度(precision)= TP/(TP+FP) ● 召回(recall,敏感度,真阳率)= TP/(TP+FN) ● 准确率(Accuracy)= (TP+TN)/(TP+FN+FP+TN) ● F1 = 2*TP / (2*TP+FP+FN) 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 
print(classification_report(y_train, pred))  
 4.3 ROC曲线具体的介绍可以参考这一篇文章,讲的很通俗易懂 https://zhuanlan.zhihu.com/p/26293316 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)")
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)
 ROC曲线一个重要的性质就是:曲线下方与坐标轴所谓面积越大越好。 |