使用逻辑回归预测用户是否会购买suv

Wang_AI Wang_AI     2023-03-02     391

关键词:

往期推荐

机器学习100天学习计划 — 第1天 数据预处理

机器学习100天学习计划 — 第2天 线性回归

机器学习100天学习计划 — 第3天 多元线性回归

这是机器学习100天学习计划的第4天,我们将探讨逻辑回归存在的必要性、逻辑回归训练时的数据要求、逻辑回归的基本运行原理。

文章的最后我们会做一个简单应用:使用逻辑回归预测用户是否会购买SUV.

01

为什么需要逻辑回归?

从前面的学习中知道,线性回归对数据的要求非常严格,比如自变脸必须满足正态分布,特征之间的多重共线性需要消除,实际生活中的数据无法彻底满足这些要求,因此它在现实场景中的应用效果有限。

为了解决那些不满足线性回归的严格要求的数据分析需求,我们需要逻辑回归。

逻辑回归由线性回归变化而来,它对数据的要求没那么高,分类效力很强,对数据不需要做消除多重共线性之类的预处理。逻辑回归有以下三个优点:

1.逻辑回归对线性关系的拟合效果好到丧心病狂,比如电商营销预测、信用卡欺诈、打分等实际落地应用相关的数据都是逻辑回归的强项。

2.对于线性数据,逻辑回归的拟合和计算非常快,尤其对于大数据,这点优势极其明显。

3.逻辑回归返回的分类结果不是固定的0或1,而是以小数形式反馈的类概率数字,因此你可以把逻辑回归返回的结果当成连续型数据使用。

逻辑回归的原理不简单,细节非常多,不是在本篇文章能讲完的,所以本篇文章主要是给大家提供逻辑回归的使用方法及其注意事项,并以一个小应用为例入门逻辑回归。

02

逻辑回归数据要求

逻辑回归对数据并不是没有要求,下面就是使用逻辑回归分析前需要注意的几个问题:

1.样本数量最好大于300.

2.自变量最好是“分类”的形式

3.模型运行前去除异常值和缺失值。

你并不需要严格遵守上述要求,遇到特殊情况可以灵活变通。

03

逻辑回归如何工作

上述内容可能你不一定能看得懂,没关系,往后看我们的实操训练,动手实操后你一定有所收获。

04

预测用户是否会购买SUV

现在有一个数据集包含了社交网络中用户的信息。这些信息涉及用户ID,性别,年龄以及预估薪资。一家汽车公司刚刚推出了他们新型的豪华SUV,我们尝试预测哪些用户会购买这种全新SUV。并且在最后一列用来表示用户是否购买:

接下来我们将建立一种逻辑回归模型来预测用户是否购买这种SUV,该模型基于两个变量,分别是年龄和预计薪资。因此我们的特征矩阵将是这两列。我们尝试寻找用户年龄与预估薪资之间的某种相关性,以及他是否购买SUV的决定。

本文源代码和数据文件,可以扫码关注【我是IT小王子

后台回复:机器学习4 下载。

4.1

数据预处理

导入库:

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

导入数据集,为了方便可视化,我们暂时去除了性别这一列:

dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
Y = dataset.iloc[:,4].values

将数据集分成训练集和测试集:

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)

特征缩放:

from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

4.2

逻辑回归模型

逻辑回归是一个线性分类器,这意味着我们在二维空间中,我们两类用户(购买和不购买)将被一条直线分割。

将逻辑回归应用于训练集:

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

4.3

预测

预测测试集结果:

y_pred = classifier.predict(X_test)

4.4

模型评估

刚刚我们预测了测试集。现在我们将评估逻辑回归模型是否正确的学习和理解数据。我们将用到混淆矩阵:

混淆矩阵是一种可视化工具,矩阵的每一列代表一个类的实例预测,而每一行表示一个实际的类的实例。之所以如此命名,是因为通过这个矩阵可以方便地看出机器是否将两个不同的类混淆了。

生成混淆矩阵:

from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)

结果如下:

[[65  3]
 [ 8 24]]

这说明,分类正确的值有65+24=89个,分类错误的值有3+8=11个,准确率为89%.

可视化的代码如下:                          

上滑查看更多代码

X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start=X_set[:, 0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),
                      np.arange(start=X_set[:, 1].min()-1, stop=X_set[:, 1].max()+1, step=0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha=0.75, cmap=ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c=ListedColormap(('red', 'green'))(i), label=j)

plt.title('LOGISTIC(Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start=X_set[:, 0].min()-1, stop=X_set[:, 0].max()+1, step=0.01),
                      np.arange(start=X_set[:, 1].min()-1, stop=X_set[:, 1].max()+1, step=0.01))

plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha=0.75, cmap=ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c=ListedColormap(('red', 'green'))(i), label=j)

plt.title('LOGISTIC(Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()


对于训练集,我们训练得到的分隔线如上图所示,存在部分的错误分类,但大部分数据点都分类正确。

使用训练集得到的分割线来分隔测试集,分类结果如上图所示,有11个错误分类的点。

05

加上性别一列进行预测

刚刚为了可视化结果,我们去掉了性别这一列进行训练和测试。

但性别对结果的影响是实际存在的,所以我们将性别重新加入训练集中进行训练并测试。

改动非常简单,只需要在导入数据集的时候将性别这一列加回来,并将性别转化为数字:

# 1.导入数据集
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [1, 2, 3]].values
Y = dataset.iloc[:, 4].values

# 性别转化为数字
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])

完整代码如下:

上滑查看更多代码

from sklearn.metrics import confusion_matrix
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 1.导入数据集
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [1, 2, 3]].values
Y = dataset.iloc[:, 4].values

# 性别转化为数字
labelencoder_X = LabelEncoder()
X[:, 0] = labelencoder_X.fit_transform(X[:, 0])

# 2.将数据集分成训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, Y, test_size=0.25, random_state=0)

# 3.特征缩放
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# 4.训练
classifier = LogisticRegression()
classifier.fit(X_train, y_train)

# 5.预测
y_pred = classifier.predict(X_test)

# 6.评估预测 生成混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)
# 生成混淆矩阵
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
print(cm)

结果如下:

(base) G:\\push\\20210117>python test_with_gender.py
[[65 3]
 [ 7 25]]

可见,分类正确的值有65+25=90个,分类错误的值有3+7=10个,准确率为90%.

这相比于除去性别这一列时得到的89%准确率的测试结果有1%的提升。

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注AI派

原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的Beyonce小姐姐

一定要备注【高清图】

????????????????????

➕我们的Beyonce小姐姐微信要记得备注【高清图】

来都来了,喜欢的话就请分享点赞在看三连再走吧~~~

Scikit Learn:将朴素贝叶斯模型预测纳入逻辑回归?

】ScikitLearn:将朴素贝叶斯模型预测纳入逻辑回归?【英文标题】:Sci-KitLearn:IncorporateNaiveBayesModelPredictionsintoLogisticRegression?【发布时间】:2018-06-0101:45:49【问题描述】:我有关于各种客户属性(自我描述和年龄)的数据,以及这... 查看详情

机器学习06-逻辑回归

1.用自己的话描述一下,什么是逻辑回归,与线性回归对比,有什么不同?线性回归:通过一个或者多个自变量与因变量之间进行建模的回归方法,其中可以为一个或者多个自变量之间的线性组合。逻辑回归:逻辑回归是一种用... 查看详情

逻辑回归算法的原理及实现(lr)

...归虽然名字叫”回归” ,但却是一种分类学习方法。使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素。逻辑回归(LogisticRegression,LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对... 查看详情

逻辑回归算法的原理及实现(lr)

...归虽然名字叫”回归” ,但却是一种分类学习方法。使用场景大概有两个:第一用来预测,第二寻找因变量的影响因素。逻辑回归(LogisticRegression,LR)又称为逻辑回归分析,是分类和预测算法中的一种。通过历史数据的表现对... 查看详情

逻辑回归实例(代码片段)

...一种机器学习分类算法,用于预测分类因变量的概率。在逻辑回归中,因变量是一个二进制变量,包含编码为1(是,成功等)或0(不,失败等)的数据。换句话说,逻辑回归模型预测P(Y=1)是X的函数。  数据  该数据集... 查看详情

python,使用逻辑回归来查看哪个变量对正预测增加了更多权重

】python,使用逻辑回归来查看哪个变量对正预测增加了更多权重【英文标题】:python,usinglogisticregressiontoseewhichvariableisaddingmoreweighttowardsapositiveprediction【发布时间】:2020-03-1310:44:44【问题描述】:所以我有一个银行数据集,我必... 查看详情

用逻辑回归预测鸢尾花种类

】用逻辑回归预测鸢尾花种类【英文标题】:MakingPredictionsonirisspecieswithlogisitcregression【发布时间】:2020-10-1012:01:38【问题描述】:我有一个给定的代码,它会根据花瓣长度和花瓣宽度告诉您鸢尾花数据集中的鸢尾花是否是维雷... 查看详情

(非常)使用逻辑回归的简单量子交易模型(代码片段)

...e),n=12)那就是我想用t-1天预测一天t。这也正确吗?我不想使用任何可能为预测提供bia结果的指标对我来说,quantstrat包似乎有一点学习曲线所以我只想确保我得到基本的正确。该模型:rm(list=ls())require(quantstrat)require(PerformanceAnalytic... 查看详情

我们可以在 python 中使用逻辑回归预测数据集的未来值吗?

】我们可以在python中使用逻辑回归预测数据集的未来值吗?【英文标题】:Canwepredictfuturevaluesofadatasetwithlogisticregressioninpython?【发布时间】:2020-03-2615:39:39【问题描述】:我正在使用逻辑回归来预测具有sklearnLogisticRegression的数据... 查看详情

更改逻辑回归中分类预测变量的参考组

...ession【发布时间】:2012-06-1516:41:54【问题描述】:我正在使用0-6级的分类预测变量运行逻辑回归。默认情况下,R将级别0视为参考组。我如何告诉R使用例如级别3而不是级别0作为参考而不重命名级别?【问题讨论】:是否有适用... 查看详情

使用逻辑回归模型获得 1 而不是 [0;1] 的预测概率

】使用逻辑回归模型获得1而不是[0;1]的预测概率【英文标题】:Getpredictionsprobabilityof1ratherthan[0;1]usingLogisticRegressionmodel【发布时间】:2021-10-3013:43:39【问题描述】:我在训练集和测试集上拟合了LogisticRegression,准确率约为80%然后... 查看详情

没有预测变量的 Sklearn 回归

...间】:2018-04-0513:52:04【问题描述】:是否可以在sklearn中使用和不使用(即仅使用截距)预测器运行回归(例如逻辑回归)?这似乎是一个相当标准的类型分析,也许这些信息已经在输出中可用。我发现唯一相关的是sklearn.svm.l1_mi... 查看详情

dc比赛员工离职预测训练赛(逻辑回归)

先去掉些不要的列。(2)Attrition:员工是否已经离职,数量和部门的关系。薪酬水平与离职率的叠加条形图。注意,对象为object类型,会导致后面运行出错,发现,改变样本和测试集比例会影响分数,——————得到结果。re... 查看详情

使用逻辑回归预测参数值

】使用逻辑回归预测参数值【英文标题】:Usinglogisticregressiontopredicttheparametervalue【发布时间】:2017-01-1913:47:58【问题描述】:我编写了不同的基本sklearn代码,使用逻辑回归来预测值。训练数据看起来像-https://gist.github.com/anonymous... 查看详情

6.逻辑回归

...tic函数中,从而能够完成对事件发生的概率进行预测,它使用一个Sigmoid函数来归一化y值,使y的取值在区间(0,1)内,是解决二分类问题的利器。公式:  代码实现sigmoid函数  逻辑回归与线性回归的区别:逻辑回归是... 查看详情

从逻辑回归绘制预测

...:07:59【问题描述】:我想在散点图中绘制y_test和预测。我使用逻辑回归作为模型。fromsklearn.linear_modelimportLogisticRegressionvectorizer=CountVectorizer()X=vectorizer.fit_transfo 查看详情

如何理解逻辑回归?原理应用场景癌症分类预测

逻辑回归(LogisticRegression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归。由于算法的简单和有效,在实际中应用非常广泛。1逻辑回归的应用场景广告点击率是否为垃圾邮件... 查看详情

逻辑斯谛回归

...种叫做逻辑回归(LogisticRegression)的算法,这是目前最流行使用最广泛的一种学习算法。在分类问题中,我们尝试预测的是结果是否属于某一个类(例如正确或错误)。分类问题的例子有:判断一封电子邮件是否是垃圾邮件;判断... 查看详情