编者按:逻辑回归算法是一种基本的重要的机器学习算法。它有着简单有效的特点,并在信用评分,营销响应等领域广泛应用。我创建了Python语言微信群,定位:Python语言学习与实践。需要入群的,请添加我的微信:luqin360,备注:Python语言入群。
逻辑回归算法是一种用于二分类的机器学习算法。线性回归我们用这个式子:
问题是这些预测对于分类来说是不合理的,因为真实的概率必然在0到1之间。为了避免这个问题,我们必须使用一个函数对p(X)建模,该函数为X的所有值提供0到1之间的输出。Logistic回归是以其核心函数Logistic函数命名的:
我们将使用Kaggle的泰坦尼克数据集。我们将尝试预测一个分类——生存还是死亡。 让我们从用Python实现逻辑回归来进行分类开始。我们将使用泰坦尼克数据集的“半清理”版本,如果您使用直接托管在Kaggle上的数据集,您可能需要做一些额外的清理。
让我们导入一些库来开始吧! Pandas和Numpy更容易分析。
import pandas as pd
import numpy as np
用于数据可视化的Seaborn和Matplotlib。
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
让我们从将titanic_train.csv文件读入pandas的一个数据框开始。
train = pd.read_csv('titanic_train.csv')
train.info()
让我们开始一些探索性的数据分析吧!我们将从检查缺失的数据开始!
我们可以使用seaborn创建一个简单的热图来查看我们丢失的数据!
sns.heatmap(train.isnull(),yticklabels=False,cbar=False,cmap='viridis')
大约20%的年龄数据缺失。年龄缺失的比例很可能小到可以用某种形式的推测来合理替代。看看Cabin列,我们似乎丢失了太多的数据,无法在基本水平上做一些有用的事情。我们稍后可能会删除这个,或者将其更改为另一个特性,如“Cabin Known: 1或0” 让我们继续可视化更多的数据! 根据性别存活下来的人数的计数图。
sns.countplot(x='Survived',hue='Sex',data=train,palette='RdBu_r')
根据乘客等级计算存活人数的计数图。
sns.countplot(x='Survived',hue='Pclass',data=train,palette='rainbow')
基于年龄的数据集分布图。
train['Age'].hist(bins=30,color='darkred',alpha=0.7)
旅客支付不同票价的分布图。
train['Fare'].hist(color='green',bins=40,figsize=(8,4))
我们想要填充缺失的年龄数据,而不是仅仅删除缺失的年龄数据行。一种方法是填入所有乘客的平均年龄。然而,我们可以更聪明地了解这一点,并按乘客级别检查平均年龄。例如
sns.boxplot(x='Pclass',y='Age',data=train,palette='winter')
我们可以看到,在高级舱中,较富裕的乘客往往年龄较大,这是有道理的。我们将根据Pclass计算的平均年龄来填补年龄缺失值。
def impute_age(cols):
Age = cols[0]
Pclass = cols[1]
if pd.isnull(Age):
if Pclass == 1:
return 37
elif Pclass == 2:
return 29
else:
return 24
else:
return Age
train['Age'] = train[['Age','Pclass']].apply(impute_age,axis=1)
再检查一遍热图!
sns.heatmap(train.isnull(),yticklabels=False,cbar=False,cmap='viridis')
让我们继续,删除Cabin列和宝行NaN的行。
train.drop('Cabin',axis=1,inplace=True)
train.dropna(inplace=True)
我们需要使用panda将分类特性转换为虚拟变量!否则,我们的机器学习算法将无法直接将这些特性作为输入。
sex = pd.get_dummies(train['Sex'],drop_first=True)
embark = pd.get_dummies(train['Embarked'],drop_first=True)
train.drop(['Sex','Embarked','Name','Ticket'],axis=1,inplace=True)
train = pd.concat([train,sex,embark],axis=1)
太棒了!我们的数据已经为模型准备好了!
让我们首先将数据分解为一个训练集和一个测试集(如果您想使用所有这些数据进行培训,您可以使用另一个test.csv文件)。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(train.drop('Survived',axis=1),
train['Survived'], test_size=0.30,
random_state=101)
from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression()
logmodel.fit(X_train,y_train)
predictions = logmodel.predict(X_test)
让我们评价模型
我们可以使用分类报告检查精度,召回,f1得分!
from sklearn.metrics import classification_report
print(classification_report(y_test,predictions))
本文简要概述了如何在python中使用逻辑回归模型。我还演示了一些有用的方法来进行数据清理。以下笔记本可以在github上找到。 谢谢你!
原文链接: https://datascienceplus.com/logistic-regression-with-python/
你若是觉得有用,清点赞并分享给其它朋友。更多数据知识,请点击阅读原文。您有任何问题,请留言。公众号推荐
数据人才(ID:datarencai)
(一个帮助数据人才找工作的公众号,
也分享数据人才学习和生活的有趣事情。)