赞
踩
提示:本案例使用逻辑回归模型,进行二分类
目录
前言
泰坦尼克号的沉没是历史上最臭名昭著的沉船之一。
1912年4月15日,在她的处女航中,被广泛认为"不沉"的"泰坦尼克号"在与冰山相撞后沉没。不幸的是,船上的每个人都没有足够的救生艇,导致2224名乘客和船员中有1502人死亡。
虽然生存中有一些运气因素,但似乎有些群体比其他群体更有可能生存下来。
我们要求您建立一个预测模型,以回答以下问题:"什么样的人更有可能生存?"使用乘客数据(即姓名,年龄,性别,社会经济阶层等)。
它是一个二分类问题,要求根据乘客的相关信息去预测乘客的生还,我们使用逻辑回归模型去预测,本案例训练集可以在这里下载:
提示:以下是本篇文章正文内容,下面案例可供参考
简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。 注意,这里用的是“可能性”,而非数学上的“概率”,logisitc回归的结果并非数学定义中的概率值,不可以直接当做概率值来用。该结果往往用于和其他特征值加权求和,而非直接相乘。
代码如下(示例):
- import matplotlib.pyplot as plt
-
- import pandas as pd
-
- from sklearn.model_selection import train_test_split
-
- from sklearn.linear_model import LogisticRegression
代码如下(示例):
- import pandas as pd
- data=pd.read_csv("train.csv") #读取数据
- data.info() #查看数据框的所有信息
在Age、Cabin、Embarked中发现有缺失值
data.describe()
1、按性别查看
- import matplotlib.pyplot as plt
- %matplotlib inline
- plt.rcParams['font.sans-serif'] = ['SimHei']
- Survived_m=data.Survived[data.Sex == 'male'].value_counts()
- Survived_f=data.Survived[data.Sex=='female'].value_counts()
- df=pd.DataFrame({'男性':Survived_m,'女性':Survived_f})
- df.plot(kind='bar',stacked=True,rot=0)
- plt.title('按性别看是否生还')
- plt.xlabel('生还')
- plt.ylabel('人数')
2、按不同的登船港口乘客的生还情况
- Survived_0=data.Embarked[data.Survived == 0].value_counts()
- Survived_1=data.Embarked[data.Survived == 1].value_counts()
- plt.rcParams['font.sans-serif'] = ['SimHei']
- df=pd.DataFrame({'生还':Survived_1,'未生还':Survived_0})
- df.plot(kind='bar',stacked=True,rot=0)
- plt.title('各登船港口乘客是否生还')
- plt.xlabel('登船港口')
- plt.ylabel('人数')
- #删除一些无关信息
- data.drop(['Name','PassengerId','Ticket','Cabin'],axis=1,inplace=True)
- data['Age']=data['Age'].fillna(data['Age'].mean())
- data['Fare']=data['Fare'].fillna(data['Fare'].mean())
- data['Embarked']=data['Embarked'].fillna(data['Embarked'].value_counts().index[0])
-
- #将性别与登船港口进行独热编码
- dumm=pd.get_dummies(data[['Sex','Embarked']],drop_first=True)
- data=pd.concat([data,dumm],axis=1)
- data.drop(['Sex','Embarked'],axis=1,inplace=True)
-
- #数据缩放
- data['Age']=(data['Age']-data['Age'].min()) / (data['Age'].max()-data['Age'].min())
- data['Fare']=(data['Fare']-data['Fare'].min()) / (data['Fare'].max()-data['Fare'].min())
- print(data.describe())
划分训练集和测试集,用于评估模型
- #划分训练集和测试集,既预留一部分数据(30%),用于评估模型。
- from sklearn.model_selection import train_test_split
- X=data.drop('Survived',axis=1)
- y=data.Survived
- X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2)
创建模型:
- from sklearn.linear_model import LogisticRegression
- LR=LogisticRegression()
训练模型:
- LR.fit(X_train,y_train)
- print('训练集准确率:\n',LR.score(X_train,y_train))
- print('验证集准确率:\n',LR.score(X_test,y_test))
测得准确率为:
接下来我们对模型进行评估
y_pred=LR.predict(X_test)
- from sklearn import metrics
- print(metrics.confusion_matrix(y_test,y_pred),)
- print(metrics.precision_score(y_test,y_pred))
- print(metrics.recall_score(y_test,y_pred))
- print(metrics.f1_score(y_test,y_pred))
- print(metrics.accuracy_score(y_test,y_pred))
使用分类报告的形式显示所有类别的查准率、查全率和F1分数等。
print(metrics.classification_report(y_test,y_pred))
- #每个样例属于正类的概率值
- y_pred_prob =LR.predict_proba(X_test)
-
- #计算ROC曲线,既真正例率、假正率等
- fpr,tpr,thresholds = metrics.roc_curve(y_test,y_pred_prob[:,1])
-
- #计算AUC值
- auc1=metrics.auc(fpr,tpr)
- print(auc1)
-
-
绘制ROC曲线
- import matplotlib.pyplot as plt
- %matplotlib inline
-
- plt.plot(fpr,tpr,lw=2,label='ROC curve(area={:.2f})'.format(auc1))
- plt.plot([0,1],[0,1],'r--')
- plt.xlabel('False Positive Rate')
- plt.ylabel('Frue Positive Rate')
- plt.title('Receiver opsitive cRatr')
- plt.legend(loc='lower right')
可以看到,该模型在测试集上的准确率高于训练集上的准确率,没有过拟合,可以考虑增加模型参数或复杂度。逻辑回归模型关于泰坦尼克号乘客生还能达到较好的预测效果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。