栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

商业异常消费数据预测(二阶)学习笔记

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

商业异常消费数据预测(二阶)学习笔记

商业异常消费数据预测(二阶)

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

内容:

1、建立线性边界的逻辑回归模型,评估模型表现

2、建立二阶多项式边界的逻辑回归模型,对比其与线性边界的表现

3、预测Pay1=80,Pay2=20时对应消费是否为异常消费

4、获取边界函数参数、绘制边界函数

1、数据加载及可视化

#数据加载
import pandas as pd
import numpy as np
data=pd.read_csv('test3.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()

2、 一阶模型建立训练及评估

#创建mask
mask=data.loc[:,'y']==1
print(mask)
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.title('pay1_pay2')
plt.xlabel('pay1')
plt.ylabel('pay2')
plt.legend((abnormal,normal),('abmormal','normal'))
plt.show()
#X,y赋值
X=data.drop(['y'],axis=1)
y=data.loc[:,'y']
X.head()
y.head()
#建立线性边界分类模型
from sklearn.linear_model import LinearRegression
LR1=LinearRegression()
LR1.fit(X,y)
#模型预测
y_pridect=LR1.predict(X)
print(y_pridect)
print(y)
#准确率计算
from sklearn.metrics import accuracy_score
accuracy=accuracy_score(y,y_pridect)
print(accuracy)
#边界函数:theta0+theta1 * X1+theta2 * X2=0
#通过边界函数计算边界
#获取边界函数参数
theta0=LR1.intercept_#截距,theta0
theta1,theta2=LR1.coef_[0][0],LR1.coef_[0][1]#系数theta1,thata2//
print(theta0,theta1,theta2)
X1=data.loc[:,'pay1']
print(X1)
X2_new=-(theta0+theta1 * X1)/theta2
print(X2_new)
fig3=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),('abmormal','normal'))
plt.show()

 3、二阶模型建立训练及评估

#生成二次项
X2=data.loc[:,'pay2']
X1_2=X1*X1
X2_2=X2*X2
X1_X2=X1*X2
print(X1_2.shape,X2_2.shape,X1_X2.shape)
#创建二次分类边界数据
X_new={'X1':X1,'X2':X2,'X1_2':X1_2,X2_2:'X2_2',X1_X2:'X1_X2'}
X_new=pd.DataFrame(X_new)#将数据转化为DataFrame格式
print(X_new)
#建立新模型
LR2=LinearRegression()
LR2.fit(X_new,y)
#模型预测
y2_preidct=LinearRegression(X_new)
print(y2_preidct)
#准确率
accuracy2=accuracy_score(y,y2_preidct)
print(accuracy2)
#获取边界函数参数
theta0=LR2.intercept_#截距,theta0
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]#系数theta1,thata2//
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)
fig4=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),('abmormal','normal'))
plt.show()

4、样本预测

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

 完整程序:

#数据加载
import pandas as pd
import numpy as np
data=pd.read_csv('test3.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)
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.title('pay1_pay2')
plt.xlabel('pay1')
plt.ylabel('pay2')
plt.legend((abnormal,normal),('abmormal','normal'))
plt.show()
#X,y赋值
X=data.drop(['y'],axis=1)
y=data.loc[:,'y']
X.head()
y.head()
#建立线性边界分类模型
from sklearn.linear_model import LinearRegression
LR1=LinearRegression()
LR1.fit(X,y)
#模型预测
y_pridect=LR1.predict(X)
print(y_pridect)
print(y)
#准确率计算
from sklearn.metrics import accuracy_score
accuracy=accuracy_score(y,y_pridect)
print(accuracy)
#边界函数:theta0+theta1 * X1+theta2 * X2=0
#通过边界函数计算边界
#获取边界函数参数
theta0=LR1.intercept_#截距,theta0
theta1,theta2=LR1.coef_[0][0],LR1.coef_[0][1]#系数theta1,thata2//
print(theta0,theta1,theta2)
X1=data.loc[:,'pay1']
print(X1)
X2_new=-(theta0+theta1 * X1)/theta2
print(X2_new)
fig3=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),('abmormal','normal'))
plt.show()
#生成二次项
X2=data.loc[:,'pay2']
X1_2=X1*X1
X2_2=X2*X2
X1_X2=X1*X2
print(X1_2.shape,X2_2.shape,X1_X2.shape)
#创建二次分类边界数据
X_new={'X1':X1,'X2':X2,'X1_2':X1_2,X2_2:'X2_2',X1_X2:'X1_X2'}
X_new=pd.DataFrame(X_new)#将数据转化为DataFrame格式
print(X_new)
#建立新模型
LR2=LinearRegression()
LR2.fit(X_new,y)
#模型预测
y2_preidct=LinearRegression(X_new)
print(y2_preidct)
#准确率
accuracy2=accuracy_score(y,y2_preidct)
print(accuracy2)
#获取边界函数参数
theta0=LR2.intercept_#截距,theta0
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]#系数theta1,thata2//
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)
fig4=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),('abmormal','normal'))
plt.show()
#新样本预测
#LR1模型预测
X_test=np.array([[80,20]])
y_pridect=LR1.predict(X_test)
print('abnormal' if y_pridect==1 else 'normal')
#LR2模型预测
X_test=np.array([[80,20,80*80,20*20,80*20]])
y_pridect=LR2.predict(X_test)
print('abnormal' if y_pridect==1 else 'normal')

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034277.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号