持续更新中。。。
7. 预测模型
首先将train分为训练集和测试集:
# 将目标变量和特征分开
X_train = train.drop('Survived',axis=1)
y_train = train['Survived']
# 将train分为训练集和测试集
# 用sklearn.model_selection 里的train_test_split
import sklearn
from sklearn.model_selection import train_test_split
X_train,x_test,Y_train,y_test = train_test_split(X_train,y_train,test_size=0.3,random_state=101)
# 待预测的数据集
X_test = test.copy()
下面开始使用不同的算法训练模型:
a. Logistic Regression
Logistic Regression用于二分类任务中,它与传统线性回归模型相比,多了一步将线性回归输出值映射到Sigmoid函数(即形似S的函数,代表有对率函数)中,可以定义大于0.5的值归为1(正)类,小于0.5的值归为0(负)类。LR过程就是找出分类回归系数W的过程。
优点是:计算代价不高,容易理解和实现;缺点是:容易欠拟合,分类精度可能不高。
其中Z为线性回归输出:
通过梯度下降算法找出代价函数的最小值。
下面使用sklearn.linear_model中的LogisticRegression训练模型并预测:
from sklearn.linear_model import LogisticRegression
LR=LogisticRegression()
LR.fit(X_train,Y_train)
Y_pred1 = LR.predict(x_test)
LR_score = round(LR.score(x_test,y_test)*100,2)
LR_score
77.99
# 用classification_report查看查准率precision、召回率recall、F1 score
from sklearn.metrics import classification_report,confusion_matrix
print(classification_report(y_test,Y_pred1))
# 混淆矩阵confusion_matrix
cm = pd.DataFrame(confusion_matrix(y_test,Y_pred1),['Actual: No','Actual: Survived'],['Predict: No','Predict: Survived'])
print(cm)
precision recall f1-score support
0 0.78 0.86 0.82 154
1 0.78 0.68 0.72 114
avg / total 0.78 0.78 0.78 268
Predict: No Predict: Survived
Actual: No 132 22
Actual: Survived 37 77
# 查看各特征在logistic regression模型中的系数
coeff_df = pd.DataFrame(X_train.columns)
coeff_df.columns = ['Feature']
# 系数
coeff_df['Correlation'] = pd.Series(LR.coef_[0])
coeff_df.sort_values(by='Correlation', ascending=False)