C6.2

逻辑回归调用方法展示

教材页 第六章,6.5节,第184页,逻辑回归
数据

stock_customers.txt,(附stock_customer.rar压缩包格式)下载后存储到D:\下,如果是其它路径,则需要修改程序中文件的路径。
数据各属性含义:是否流失, 账户资金(元), 最后一次交易距今时间(天), 上月交易佣金(元), 累计交易佣金(元), 本券商使用时长(年)
分类问题:预测是否流失。(二分类问题)
说明:本数据来自互联网,仅用于辅助验证代码,如侵权立即更换。这里仅用于教学工作。

任务 调用逻辑回归函数,完成逻辑回归模型。
Python

# 1.读取数据
import numpy as np;
X = np.loadtxt('D:\\stock_customers.txt', delimiter = '\t'); #注意:如果文件存放路径不同,则需要修改路径。
# 2.划分输入特征和输出特征
y = X[:,0]; #首列就是分类标记
X = X[:,1:6]; #相当于取1,2,3,4,5列,如果更换数据集,需要提根据列数重新设置。

# 3.划分训练集和测试集
from sklearn.model_selection import train_test_split;
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1);

# 4.模型搭建
from sklearn.linear_model import LogisticRegression;
model = LogisticRegression();
model.fit(X_train, y_train);

# 5.模型使用1 - 预测数据结果
y_pred = model.predict(X_test);
print('前100个预测结果展示:', y_pred[0:100]);

from sklearn.metrics import accuracy_score;
score = accuracy_score(y_pred, y_test);
print('准确率=', score);

model.score(X_test, y_test);

# 6.模型使用2 - 预测概率
y_pred_proba = model.predict_proba(X_test) ;
print('输出前5名的概率展示\n', y_pred_proba[0:5]);

#print(y_pred_proba[:,1]);

# 7.查看各个变量的系数
print('模型系数:\n', model.coef_);
print('模型截距:', model.intercept_);

C++ #include "orsci.h"
#include "orsci_dm.h"
using namespace orsci;
using namespace dm;
mdouble X;
X.loadFromTextFile("D:\\stock_customers.txt"); //如果文件存放路径有变化,需要修改路径。
vint y = X.col(0).to_vint_byround(); //首列为分类标记列
X.delete_col(0); //删除首列(分类标记列)
dm::cmdouble m;
m.data_ = X;
m.labels_ = y;
m.model.logistic_TwoClass.train();
colint pred= m.model.logistic_TwoClass.predict(X);
cout << "前100个预测结果:" << pred.subvector(0, 100).T() << endl;
cout << "十折交叉验证结果:" << m.model.logistic_TwoClass.kFold(10, true, false, 2910) << endl; //2910是随机种子。
输出

Python结果:前100个预测结果展示: [0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 0. 0. 1.
0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 1. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 0. 0. 0. 1.
0. 0. 0. 1.]
准确率= 0.7977288857345636
输出前5名的概率展示
[[0.82041491 0.17958509]
[0.84029613 0.15970387]
[0.79819342 0.20180658]
[0.62989192 0.37010808]
[0.61636611 0.38363389]]
模型系数:
[[ 2.41952469e-05 8.16881491e-03 1.04320950e-02 -2.54894468e-03
-1.10120609e-04]]
模型截距: [-1.43393291e-06]

C++结果:

前100个预测结果:0 0 1 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
十折交叉验证结果:7043 1492 0.788158 0.773441 0.788158 0.78073 0.788158 0.438118

书籍 姜维.《数据分析与数据挖掘》、《数据分析与数据挖掘建模与工具》,电子工业出版社, 2023,2024。
软件 Python,C++(附加orsci包)。