机器学习入门与Python实战(三):分类与逻辑回归 Logistic Regression

目录

现实案例

分类预测

通过股价预测任务区分回归任务与分类任务

分类问题求解

更适合于分类场景的模型:逻辑回归

逻辑回归处理更复杂的分类任务

逻辑回归模型求解

Python实战:商业异常消费数据预测

商业异常消费数据预测实战summary:

拓展学习


现实案例

垃圾短信检测::自动判断收到的信息是否为垃圾信息

如何实现

收集一些样本,告诉计算机哪些是垃圾信息

计算机自动寻找垃圾信息共同特征(部分特征:发件人、是否群发、网址、元、赢、微信、免费)

在新信息中检测是否包含垃圾信息特征内容,判断其是否为垃圾邮件

图像识别

手写数字识别http://yann.lecun.com/exdb/lenet/

股票涨跌预测:判断每只股票接下来一段时间会上涨,还是下跌

分类预测

根据数据类别与部分特征信息,自动寻找类别与特征信息的关系,判断一个新的样本属于哪种类别

分类预测的实现方法

通过股价预测任务区分回归任务与分类任务

回归:连续性数值预测

模型输出:连续型数值

(明天股价预测为:125.1

分类:非连续性判断类别

模型输出:非连续型标签

(明天股价预测为:上涨)

分类问题求解

任务:根据水位,判断水池是否需要蓄水或放水

训练数据

 

水位为-1-2-3-4-5

水不足,待蓄水(负样本)

 

水位为12345

水过量,待放水(正样本)

更适合于分类场景的模型:逻辑回归

1、更符合类别数据分布特点;

2、连续的函数关系

根据数据特征,计算样本归属于某一类别的概率P(x),根据概率数值判断其所属类别。

逻辑回归处理更复杂的分类任务

逻辑回归模型求解

  • 寻找损失函数极小值点
  • 分类问题,结果为离散数据,需要对损失函数进行调整以适应梯度下降法求解

 

Python实战:商业异常消费数据预测

基础环境: Python语言;安装核心工具包numpy、pandas、sklearn、matplotlib;环境管理软件Anaconda;Jupyter notebook

环境配置参考:机器学习入门与Python实战核心工具篇:pip源、python、anaconda、工具包(完整版)https://blog.csdn.net/dfly_zx/article/details/110188923

任务:基于task2_data.csv数据,建立二阶多项式逻辑回归模型实现异常消费数据预测,与线性逻辑回归模型结果进行对比。

#数据加载
import pandas as pd
import numpy as np
data = pd.read_csv('task2_data.csv')
data.head()

#数据可视化
from matplotlib import pyplot as plt
fig1= plt.figure()
plt.scatter(data.loc[:,'pay1'],data.loc[:,'pay2'])
plt.title('pay1_pay2')
plt.xlabel('pay1')
plt.ylabel('pay2')
plt.show()

#创建mask
mask= data.loc[:,'y']==1
print(mask)

fig1= plt.figure()
abnormal = plt.scatter(data.loc[:,'pay1'][mask],data.loc[:,'pay2'][mask])
normal = plt.scatter(data.loc[:,'pay1'][~mask],data.loc[:,'pay2'][~mask])

plt.title('pay1_pay2')
plt.xlabel('pay1')
plt.ylabel('pay2')
plt.legend((abnormal,normal),('abnormal','normal'))
plt.show()

#X y赋值
X = data.drop(['y'],axis=1)
y = data.loc[:,'y']
X.head()
y.head()
print(X.shape,y.shape)

#建立线性边界分类模型
from sklearn.linear_model import LogisticRegression
LR1 = LogisticRegression()
LR1.fit(X,y)

#模型预测
y_predict = LR1.predict(X)
print(y_predict)
print(y)

#准确率计算
from sklearn.metrics import accuracy_score
accuracy = accuracy_score(y,y_predict)
print(accuracy)

#边界函数参数获取
theta0 = LR1.intercept_
theta1,theta2 = LR1.coef_[0][0],LR1.coef_[0][1]
print(theta0,theta1,theta2)

X1 = data.loc[:,'pay1']
print(X1)
X2_new = -(theta0+theta1*X1)/theta2
print(X2_new)

fig2= plt.figure()
abnormal = plt.scatter(data.loc[:,'pay1'][mask],data.loc[:,'pay2'][mask])
normal = plt.scatter(data.loc[:,'pay1'][~mask],data.loc[:,'pay2'][~mask])
plt.plot(X1,X2_new)
plt.title('pay1_pay2')
plt.xlabel('pay1')
plt.ylabel('pay2')
plt.legend((abnormal,normal),('abnormal','normal'))
plt.show()

X2 = data.loc[:,'pay2']
print(X2)
#生成二次项
X1_2 = X1*X1
X2_2 = X2*X2
X1_X2 = X1*X2
print(X1_2.shape,X2_2.shape,X1_X2.shape)
print(X1[0],X2[0],X1_2[0],X2_2[0],X1_X2[0])

#创建二次分类边界数据
X_new = {'X1':X1,'X2':X2,'X1_2':X1_2,'X2_2':X2_2,'X1_X2':X1_X2}
X_new = pd.DataFrame(X_new)
print(X_new)

#建立新模型
LR2 = LogisticRegression()
LR2.fit(X_new,y)
#模型预测
y2_predict = LR2.predict(X_new)
print(y2_predict)
#准确率
accuracy2 = accuracy_score(y,y2_predict)
print(accuracy2)

#边界函数参数获取
theta0 = LR2.intercept_
theta1,theta2,theta3,theta4,theta5 = LR2.coef_[0][0],LR2.coef_[0][1],LR2.coef_[0][2],LR2.coef_[0][3],LR2.coef_[0][4]
print(theta0,theta1,theta2,theta3,theta4,theta5)

X1_new = X1.sort_values()
print(X1_new)
print(X1)
a = theta4
b = theta5*X1_new + theta2
c = theta0+theta1*X1_new+theta3*X1_new*X1_new
X2_new_2 = (-b+np.sqrt(b*b-4*a*c))/(2*a)
print(X2_new_2)

fig2= plt.figure()
abnormal = plt.scatter(data.loc[:,'pay1'][mask],data.loc[:,'pay2'][mask])
normal = plt.scatter(data.loc[:,'pay1'][~mask],data.loc[:,'pay2'][~mask])
plt.plot(X1_new,X2_new_2)
plt.title('pay1_pay2')
plt.xlabel('pay1')
plt.ylabel('pay2')
plt.legend((abnormal,normal),('abnormal','normal'))
plt.show()

#新样本预测pay1=80, pay2=20
X_test = np.array([[80,20,80*80,20*20,80*20]])
y_predict = LR2.predict(X_test)
print(X_test)
print('abnormal' if y_predict==1 else 'normal')

商业异常消费数据预测实战summary:

1、通过搭建线性边界逻辑回归模型,实现了消费者消费行为的分类预测;
2、结合准确率指标与可视化分类结果,发现线性边界分类效果不是很理想;
3、引入了二次项数据,完成二阶多项式边界的逻辑回归预测,实现分类准确率从0.8提高到0.97,模型表现提升明显
3、调用predict方法对新的样本做了预测,发现其为正常消费;
4、实现了二阶分类边界的可视化,观察其发现该边界确实可以很好的区分两类样本从而达到很好的分类效果。
参考链接:
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html


拓展学习

如果现在就想开始学习机器学习,你还可以:

1、添加微信:ai_flare,领取Python编程课(AI方向)、Python实现机器学习,免费领取(仅限前100名)

2、人工智能学习路线:专为AI小白设计的人工智能实战课 - Python3入门人工智能 基础+实战 学习视频教程-CSDN学院

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值