专栏首页数据科学与人工智能模型|利用Python语言做逻辑回归算法

模型|利用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 条评论
登录 后参与评论

相关文章

  • 应用|使用正则化线性模型和XGboost对价格建模

    好消息是我们有很多特征可以使用(81),坏消息是有19个特征有缺失值,其中4个特征缺失值超过80%。对于任何一个特征,如果它缺失了80%的值,那么它就没有那么重...

    陆勤_数据人网
  • 【Python环境】scikit-learn的线性回归模型

    内容概要 如何使用pandas读入数据 如何使用seaborn进行数据的可视化 scikit-learn的线性回归模型和使用方法 线性回归模型的评估测度 特征选...

    陆勤_数据人网
  • 类别不平衡问题:类别权重分析法

    在许多应用领域,我们经常会遇到数据集具有类别不平衡特性。即类别之间的数量相差非常大。如何解决这个问题呢?

    陆勤_数据人网
  • 【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积

    实际上非常简单,精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另...

    LhWorld哥陪你聊算法
  • Radial Basis Function Network

    使用高斯核函数方式把数据维度扩展到无限维度进而得到一条粗壮的分界线。仔细看一下这个分割函数,其实就是一些Gaussian函数的线性组合,y就是增长的方向。 ...

    西红柿炒鸡蛋
  • Radial Basis Function Network

    使用高斯核函数方式把数据维度扩展到无限维度进而得到一条粗壮的分界线。仔细看一下这个分割函数,其实就是一些Gaussian函数的线性组合,y就是增长的方向。 ...

    西红柿炒鸡蛋
  • 动手学深度学习(五) 梯度消失、梯度爆炸

    深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)。

    致Great
  • 《模式识别与智能计算》基于PCA的模板匹配法

    用户4492257
  • 《模式识别与智能计算》模板匹配法

    模板匹配法说白就是特征一一对应,将数据每个特征相差加起来,然后总的特征值最小的就是相似度最大的

    用户4492257
  • 《模式识别与智能计算》基于类中心的欧式距离法分类

    算法过程: 1 选取某一样本 2 计算类中心 3 计算样本与每一类的类中心距离,这里采用欧式距离 4 循环计算待测样品和训练集中各类中心距离找出距离待测...

    用户4492257

扫码关注云+社区

领取腾讯云代金券