当前位置:   article > 正文

机器学习——逻辑回归案例——泰坦尼克号乘客生还_泰坦尼克逻辑回归

泰坦尼克逻辑回归

提示:本案例使用逻辑回归模型,进行二分类

 

泰坦尼克号的沉没是历史上最臭名昭著的沉船之一。

1912年4月15日,在她的处女航中,被广泛认为"不沉"的"泰坦尼克号"在与冰山相撞后沉没。不幸的是,船上的每个人都没有足够的救生艇,导致2224名乘客和船员中有1502人死亡。

虽然生存中有一些运气因素,但似乎有些群体比其他群体更有可能生存下来。

我们要求您建立一个预测模型,以回答以下问题:"什么样的人更有可能生存?"使用乘客数据(即姓名,年龄,性别,社会经济阶层等)。

它是一个二分类问题,要求根据乘客的相关信息去预测乘客的生还,我们使用逻辑回归模型去预测,本案例训练集可以在这里下载:

https://download.csdn.net/download/qq_21402983/85068980https://download.csdn.net/download/qq_21402983/85068980


提示:以下是本篇文章正文内容,下面案例可供参考

一、逻辑回归是什么?

        简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。 注意,这里用的是“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。该结果往往用于和其他特征值加权求和,而非直接相乘。

二、使用步骤

1.需要引入库

代码如下(示例):

  1. import matplotlib.pyplot as plt
  2. import pandas as pd
  3. from sklearn.model_selection import train_test_split
  4. from sklearn.linear_model import LogisticRegression

2.首先导入读取数据模块pandas读入数据

代码如下(示例):

  1. import pandas as pd                       
  2. data=pd.read_csv("train.csv")                #读取数据
  3. data.info()                                  #查看数据框的所有信息

在Age、Cabin、Embarked中发现有缺失值

data.describe()

3、查看不同属性的生还情况

1、按性别查看

  1. import matplotlib.pyplot as plt
  2. %matplotlib inline
  3. plt.rcParams['font.sans-serif'] = ['SimHei']
  4. Survived_m=data.Survived[data.Sex == 'male'].value_counts()
  5. Survived_f=data.Survived[data.Sex=='female'].value_counts()
  6. df=pd.DataFrame({'男性':Survived_m,'女性':Survived_f})
  7. df.plot(kind='bar',stacked=True,rot=0)
  8. plt.title('按性别看是否生还')
  9. plt.xlabel('生还')
  10. plt.ylabel('人数')

2、按不同的登船港口乘客的生还情况

  1. Survived_0=data.Embarked[data.Survived == 0].value_counts()
  2. Survived_1=data.Embarked[data.Survived == 1].value_counts()
  3. plt.rcParams['font.sans-serif'] = ['SimHei']
  4. df=pd.DataFrame({'生还':Survived_1,'未生还':Survived_0})
  5. df.plot(kind='bar',stacked=True,rot=0)
  6. plt.title('各登船港口乘客是否生还')
  7. plt.xlabel('登船港口')
  8. plt.ylabel('人数')

4、数据预处理

  1. #删除一些无关信息
  2. data.drop(['Name','PassengerId','Ticket','Cabin'],axis=1,inplace=True)
  3. data['Age']=data['Age'].fillna(data['Age'].mean())
  4. data['Fare']=data['Fare'].fillna(data['Fare'].mean())
  5. data['Embarked']=data['Embarked'].fillna(data['Embarked'].value_counts().index[0])
  6. #将性别与登船港口进行独热编码
  7. dumm=pd.get_dummies(data[['Sex','Embarked']],drop_first=True)
  8. data=pd.concat([data,dumm],axis=1)
  9. data.drop(['Sex','Embarked'],axis=1,inplace=True)
  10. #数据缩放
  11. data['Age']=(data['Age']-data['Age'].min()) / (data['Age'].max()-data['Age'].min())
  12. data['Fare']=(data['Fare']-data['Fare'].min()) / (data['Fare'].max()-data['Fare'].min())
  13. print(data.describe())

划分训练集和测试集,用于评估模型

  1. #划分训练集和测试集,既预留一部分数据(30%),用于评估模型。
  2. from sklearn.model_selection import train_test_split
  3. X=data.drop('Survived',axis=1)
  4. y=data.Survived
  5. X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)

5、模型构建与训练

 创建模型:

  1. from sklearn.linear_model import LogisticRegression
  2. LR=LogisticRegression()

训练模型:

  1. LR.fit(X_train,y_train)
  2. print('训练集准确率:\n',LR.score(X_train,y_train))
  3. print('验证集准确率:\n',LR.score(X_test,y_test))

测得准确率为:

三、模型评估

接下来我们对模型进行评估

6.预测测试数据

y_pred=LR.predict(X_test)

7.绘制混淆矩阵

  1. from sklearn import metrics
  2. print(metrics.confusion_matrix(y_test,y_pred),)

  1. print(metrics.precision_score(y_test,y_pred))
  2. print(metrics.recall_score(y_test,y_pred))
  3. print(metrics.f1_score(y_test,y_pred))
  4. print(metrics.accuracy_score(y_test,y_pred))

 使用分类报告的形式显示所有类别的查准率、查全率和F1分数等。

print(metrics.classification_report(y_test,y_pred))

8.绘制ROC曲线,并计算AUC。

  1. #每个样例属于正类的概率值
  2. y_pred_prob =LR.predict_proba(X_test)
  3. #计算ROC曲线,既真正例率、假正率等
  4. fpr,tpr,thresholds = metrics.roc_curve(y_test,y_pred_prob[:,1])
  5. #计算AUC值
  6. auc1=metrics.auc(fpr,tpr)
  7. print(auc1)

 绘制ROC曲线

  1. import matplotlib.pyplot as plt
  2. %matplotlib inline
  3. plt.plot(fpr,tpr,lw=2,label='ROC curve(area={:.2f})'.format(auc1))
  4. plt.plot([0,1],[0,1],'r--')
  5. plt.xlabel('False Positive Rate')
  6. plt.ylabel('Frue Positive Rate')
  7. plt.title('Receiver opsitive cRatr')
  8. plt.legend(loc='lower right')


总结

可以看到,该模型在测试集上的准确率高于训练集上的准确率,没有过拟合,可以考虑增加模型参数或复杂度。逻辑回归模型关于泰坦尼克号乘客生还能达到较好的预测效果

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号