使用逻辑回归预测用户是否会购买SUV
往期推荐
机器学习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小姐姐微信要记得备注【高清图】哦
来都来了,喜欢的话就请分享、点赞、在看三连再走吧~~~
使用逻辑回归预测用户是否会购买SUV相关推荐
- R语言逻辑回归预测分析付费用户
原文链接:http://tecdat.cn/?p=967 对于某企业新用户,会利用大数据来分析该用户的信息来确定是否为付费用户,弄清楚用户属性,从而针对性的进行营销,提高运营人员的办事效率(点击文末& ...
- 逻辑回归预测贷款用户是否会逾期
学习笔记(二)逻辑回归预测贷款用户是否会逾期 算法实践能力的[整个思路]:构建模型-->模型融合-->模型评估-->交叉验证-->模型调参-->特征工程.[遵循]一次只做 ...
- 某公司有一台打印、复印一体机,需要将购买成本分年均摊到隔年的费用中。请编写一个程序,根据用户输入的购买金额和预计使用年限计算每年的分摊费用。要求对输入异常进行适当的处理。
某公司有一台打印.复印一体机,需要将购买成本分年均摊到隔年的费用中. 请编写一个程序,根据用户输入的购买金额和预计使用年限计算每年的分摊费用. 要求对输入异常进行适当的处理. def compute_ ...
- 30销售是让用户开心的购买和消费
销售产品,一定要记住,从来不是欺骗和欺诈让别人接受你的产品,而是让用户开心的购买和消费.所谓的开心是心甘情愿,所谓的消费是物有所值. 如果你为了把一个残缺的劣质产品,美化和贴金销售给用户,那么最大的结 ...
- 泰坦尼克号幸存者逻辑回归预测
泰坦尼克号幸存者预测 import numpy as np import pandas as pd 数据读取 #最后一行是换行符不取 train=pd.read_csv(r'./mytrain.csv ...
- 分享台阶价格对比逻辑。(商城中购买数量越多,单价越低)
台阶价格对比逻辑 台阶价格的对比逻辑 当用户选择一定数量的产品的时候.每输入一次会对比设定的台阶数.达到的则用台阶数对应的单价. 如果输入特定的值则改成特定价格不难.但是如何判断.用户输入的数字在哪个 ...
- Kaggle泰坦尼克号船难--逻辑回归预测生存率
Kaggle泰坦尼克号船难–逻辑回归预测生存率#一.题目 https://www.kaggle.com/c/titanic 二.题意分析 train.csv中有891条泰坦尼克号乘客的数据,包括这些乘 ...
- 逻辑回归预测瘀血阻络证||LogRegression 二分类 python3|五折交叉验证
要求 把数据集分为训练集和测试集使用逻辑回归训练.预测,得出相应的分类指标准确率accuracy,精确率precision,召回率recall,F1-score,并画出最终的ROC曲线,得出AUC值. ...
- 逻辑回归预测泰坦尼克号乘客生存率
逻辑回归预测泰坦尼克号乘客生存率 描述 RMS泰坦尼克号的沉没是历史上最臭名昭着的沉船之一.1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在2224名乘客和机组人员中造成1502 ...
最新文章
- Linux内存释放脚本
- html把图片定位在盒子中心,html – CSS在图像的右上角定位一个图标
- Jmeter查看log日志
- .Net读取Excel(包括Excel2007)
- Jlink按照用zadig升级用于openocd后,还原
- MacBook 运维软件
- 怎么用C语言程序表白,c语言表白代码 用C语言表白.doc
- react 父子 --- 子父 通讯
- 动态仙人掌 系列题解之二——3465: 动态仙人掌 II
- 星星之火-50:无意中发现一种能够把网络视频下载到本地计算机中的方法
- 勒让德Legendre变换
- FLV.js播放报错,及浏览器播放flv缓存内存不足导致黑屏
- 转:使用rz上传压缩文件遇到的一些坑
- 力扣242.有效的字母异位词(Java语言,排序法、散列表法)
- Fractions (水)
- 众筹网站项目第五天之用户的增、删、改
- imagemagick安装问题
- 19、会员中心 - 小程序端开发 - 微擎小程序模块应用开发
- 小红有5本新书,借给3位小朋友
- windows 下 pycuda 安装问题