前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模型|利用Python语言做逻辑回归算法

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

作者头像
陆勤_数据人网
发布2019-05-17 14:26:21
1.8K0
发布2019-05-17 14:26:21
举报

编者按:逻辑回归算法是一种基本的重要的机器学习算法。它有着简单有效的特点,并在信用评分,营销响应等领域广泛应用。我创建了Python语言微信群,定位:Python语言学习与实践。需要入群的,请添加我的微信:luqin360,备注:Python语言入群。

逻辑回归算法是一种用于二分类的机器学习算法。线性回归我们用这个式子:

问题是这些预测对于分类来说是不合理的,因为真实的概率必然在0到1之间。为了避免这个问题,我们必须使用一个函数对p(X)建模,该函数为X的所有值提供0到1之间的输出。Logistic回归是以其核心函数Logistic函数命名的:

我们将使用Kaggle的泰坦尼克数据集。我们将尝试预测一个分类——生存还是死亡。 让我们从用Python实现逻辑回归来进行分类开始。我们将使用泰坦尼克数据集的“半清理”版本,如果您使用直接托管在Kaggle上的数据集,您可能需要做一些额外的清理。

导入库

让我们导入一些库来开始吧! Pandas和Numpy更容易分析。

代码语言:javascript
复制
import pandas as pd
import numpy as np

用于数据可视化的Seaborn和Matplotlib。

代码语言:javascript
复制
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
数据集

让我们从将titanic_train.csv文件读入pandas的一个数据框开始。

代码语言:javascript
复制
train = pd.read_csv('titanic_train.csv')
train.info()
探索性数据分析EDA

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

缺失的数据

我们可以使用seaborn创建一个简单的热图来查看我们丢失的数据!

代码语言:javascript
复制
sns.heatmap(train.isnull(),yticklabels=False,cbar=False,cmap='viridis')

大约20%的年龄数据缺失。年龄缺失的比例很可能小到可以用某种形式的推测来合理替代。看看Cabin列,我们似乎丢失了太多的数据,无法在基本水平上做一些有用的事情。我们稍后可能会删除这个,或者将其更改为另一个特性,如“Cabin Known: 1或0” 让我们继续可视化更多的数据! 根据性别存活下来的人数的计数图。

代码语言:javascript
复制
sns.countplot(x='Survived',hue='Sex',data=train,palette='RdBu_r')

根据乘客等级计算存活人数的计数图。

代码语言:javascript
复制
sns.countplot(x='Survived',hue='Pclass',data=train,palette='rainbow')

基于年龄的数据集分布图。

代码语言:javascript
复制
train['Age'].hist(bins=30,color='darkred',alpha=0.7)

旅客支付不同票价的分布图。

代码语言:javascript
复制
train['Fare'].hist(color='green',bins=40,figsize=(8,4))
数据清洗

我们想要填充缺失的年龄数据,而不是仅仅删除缺失的年龄数据行。一种方法是填入所有乘客的平均年龄。然而,我们可以更聪明地了解这一点,并按乘客级别检查平均年龄。例如

代码语言:javascript
复制
sns.boxplot(x='Pclass',y='Age',data=train,palette='winter')

我们可以看到,在高级舱中,较富裕的乘客往往年龄较大,这是有道理的。我们将根据Pclass计算的平均年龄来填补年龄缺失值。

代码语言:javascript
复制
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)

再检查一遍热图!

代码语言:javascript
复制
sns.heatmap(train.isnull(),yticklabels=False,cbar=False,cmap='viridis')

让我们继续,删除Cabin列和宝行NaN的行。

代码语言:javascript
复制
train.drop('Cabin',axis=1,inplace=True)
train.dropna(inplace=True)
转换分类特征

我们需要使用panda将分类特性转换为虚拟变量!否则,我们的机器学习算法将无法直接将这些特性作为输入。

代码语言:javascript
复制
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文件)。

代码语言:javascript
复制
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)
训练和预测
代码语言:javascript
复制
from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression()
logmodel.fit(X_train,y_train)
predictions = logmodel.predict(X_test)

让我们评价模型

评价

我们可以使用分类报告检查精度,召回,f1得分!

代码语言:javascript
复制
from sklearn.metrics import classification_report
print(classification_report(y_test,predictions))

本文简要概述了如何在python中使用逻辑回归模型。我还演示了一些有用的方法来进行数据清理。以下笔记本可以在github上找到。 谢谢你!

原文链接: https://datascienceplus.com/logistic-regression-with-python/

你若是觉得有用,清点赞并分享给其它朋友。更多数据知识,请点击阅读原文。您有任何问题,请留言。公众号推荐

数据人才(ID:datarencai)

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据科学与人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导入库
  • 数据集
  • 探索性数据分析EDA
    • 缺失的数据
    • 数据清洗
    • 转换分类特征
    • 建立逻辑回归模型
    • 训练和预测
    • 评价
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档