模型|利用Python语言做逻辑回归算法

编者按:逻辑回归算法是一种基本的重要的机器学习算法。它有着简单有效的特点,并在信用评分,营销响应等领域广泛应用。我创建了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()

探索性数据分析EDA

让我们开始一些探索性的数据分析吧!我们将从检查缺失的数据开始!

缺失的数据

我们可以使用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)

(一个帮助数据人才找工作的公众号,

也分享数据人才学习和生活的有趣事情。)

本文分享自微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券