sklearn分类分析实战

sklearn分类分析实战

任务:商业异常消费数据预测

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

分析:

  • pay1:第一次消费;pay2:第二次消费

  • 假设用户在某一个地方进行了两次消费

  • 根据这两次消费去判断这是否是一个正常消费行为

  • 本次任务即将橙色点和蓝色点区分开

过程:

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

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

  3. 预测pay1=70,pay2=20时对应消费是否为异常消费

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

# 数据加载
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

data = pd.read_csv('../task_data.csv')
# 数据中类别1为异常的消费
# 创建mask筛选变量将图形区分
mask = data.loc[:, 'y'] == 1
# 数据可视化

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 = np.array(X)
y = np.array(y)

# 建立逻辑回归模型

LR1 = LogisticRegression()
# 模型训练
LR1.fit(X, y)
# 模型预测
y_predict = LR1.predict(X)
# print(y_predict)
# print(y)
# 计算准确率

accuracy = accuracy_score(y, y_predict)
print(accuracy)
# 获取边界函数核心参数theta
theta0 = LR1.intercept_
theta1, theta2 = LR1.coef_[0][0], LR1.coef_[0][1]
# print(theta0,theta1,theta2)
X1 = data.loc[:, 'pay1']
X2 = data.loc[:, 'pay2']
# 计算出来的X2
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()
# 此时边界函数并不是理想的,因我我们期待的边界应该是一个抛物线

 


# 优化模型
# 增加高阶项数据--此处增加二阶项
X1_2 = X1 * X1
X2_2 = X2 * X2
X1_X2 = X1 * X2
# 创建二阶数据样本
X_new = {'X1': X1, 'X2': X2, 'X1_2': X1_2, 'X2_2': X2_2, 'X1_X2': X1_X2}
X_new = pd.DataFrame(X_new)
# 模型训练
LR2 = LogisticRegression()
LR2.fit(X_new, y)
y2_predict = LR2.predict(X_new)
accuracy2 = accuracy_score(y, y2_predict)
print(accuracy2)
# 获取边界函数参数
# 获取边界函数核心参数theta
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排序
X1_new = X1.sort_values()
# a,b,c赋值
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)
# 数据可视化
# 画出边界函数的图形

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_new, X2_new_2)
plt.title('pay1_pay2')
plt.xlabel('pay1')
plt.ylabel('pay2')
plt.legend((abnormal, normal), ('abnormal', 'normal'))  # 数据标签
plt.show()

 

 

核心代码

数据加载及展示

#数据加载及展示
import pandas as pd
import numpy as np
data = pd.read_csv('task_data_csv')
# 数据中类别1为异常的消费

数据预处理

# X,y赋值
X = data.drop(['y'], axis=1)
y = data.loc[:, 'y']
# 格式转化 有没有似乎无所谓
X = np.array(X)
y = np.array(y)
X1 = data.loc[:, 'pay1']
X2 = data.loc[:, 'pay2']

模型建立及训练

# 建立逻辑回归模型
LR1 = LogisticRegression()
# 模型训练
LR1.fit(X, y)

模型预测

# 模型预测
y_predict = LR1.predict(X)
# 计算准确率
accuracy = accuracy_score(y, y_predict)

结果展示及表现评估

# 获取边界函数核心参数theta
theta0 = LR1.intercept_
theta1, theta2 = LR1.coef_[0][0], LR1.coef_[0][1]
# print(theta0,theta1,theta2)
# 计算出来的X2
X2_new = -(theta0 + theta1 * X1) / theta2
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), ('abnormal', 'normal'))  # 数据标签
plt.show()

数学公式

模型一

$$
边界函数:θ{_0}+θ{_1}X{_1}+θ{_2}X{_2}=0
$$

$$
X{_2}=-(θ{_0}+θ{_1}X{_1})/θ{_2}
$$

模型二(优化高阶)

$$
二阶边界函数:θ{_0}+θ{_1}X{_1}+θ{_2}X{_2}+θ{_3}X{^2_1}+θ{_4}X{^2_2}+θ{_5}X{_1X_2}=0
$$

$$
a x^2 + b x + c=0: x1 = \sqrt{(-b+(b^2-4ac))}/2a,x2 = \sqrt{(-b-(b^2-4ac))}/2a
$$

$$
\theta_4 X_2^2 + (\theta_5 X_1+ \theta_2) X_2 + (\theta_0 + \theta_1 X_1 + \theta_3 X_1^2)=0
$$
posted @ 2023-05-11 16:42  qfzwy  阅读(177)  评论(0)    收藏  举报