3.机器学习模型代码——逻辑回归代码案例⼯作实操
import numpy as np
import pandas as pd
import math
ad_excel("data.xlsx",dtype=str)
df.describe()
随机值公司Id
时间内注册公司数
量(⽉)
注册地
址重合
关联公司
涉案
法⼈有涉案记录
(总次数)
社保
⼈数
纳税⾦
额
法⼈过
境记录
预测
结果
属性
count47234723472347234723472347234723472347234723 unique3044472320202020472975133
top2988company_S250999910300011⾼风
险
⾼风
险
freq51385373420430218182141822142214 # 映射属性标签为数值型
# list()
df['label']=df.属性
list_k=['⾼风险','中风险','低风险']
list_v=[0,1,2]
replace_dict_T=dict(zip(list_k,list_v))
# replace_dict={
# '⾼风险':0,
# '中风险':1,
# '低风险':2
# }
df['label']=df['label'].replace(replace_dict_T)
X_col=[
'时间内注册公司数量(⽉)',
'注册地址重合',
'关联公司涉案',
'法⼈有涉案记录(总次数)',
'社保⼈数',
'纳税⾦额',
'法⼈过境记录']
Y_col=['label']
data_X=df[X_col]
data_Y=df[Y_col]
# 数据分割包
del_selection import train_test_split
tran_x,test_x,tran_y,test_y = train_test_split(data_X,data_Y,test_size=0.2,random_state=42)##train打错了# X_train, X_test, y_train, y_test
# 归⼀化
# X_train_scaled = scaler.fit_transform(X_train)
# # 对于测试集 transform
# X_test_scaled = ansform(X_test)
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
tran_x_mms=scaler.fit_transform(tran_x)
tran_x=pd.DataFrame(tran_x_mms,columns=lumns,index=tran_x.index)
test_x_mms= ansform(test_x)
test_x=pd.DataFrame(test_x_mms,columns=lumns,index=test_x.index)
# penalty='l2',
# *,
# dual=False,
# tol=0.0001,
# C=1.0,
# fit_intercept=True,
# intercept_scaling=1,
# class_weight=None,
# random_state=None,
# solver='lbfgs',
# max_iter=100,
# multi_class='auto',
# verbose=0,
# warm_start=False,
# n_jobs=None,
# l1_ratio=None,
#Penalty 证则化⽅法 L1 l2 避免果过拟合,solver 损失函数
#fit_intercept 常数项
#multi_class 多分类时 ovr快,精度低;Multinomial慢,精度⾼。
#solver 损失函数
from sklearn.linear_model import LogisticRegression
model_LR = LogisticRegression(multi_class ="ovr")#fit_intercept 是否有常数项
model_LR_result=model_LR.fit(tran_x,tran_y['label'])
import joblib
joblib.dump(model_LR_result,'model_del')
joblib.dump(model_LR,'del')
['del']
model_LR_result=joblib.load('model_del')#⽅法1
model_LR_result.score(test_x,test_y.label)
0.9957671957671957
model_LR=joblib.load('del')# ⽅法2 好像⽆差别
model_LR.score(test_x,test_y.label)
0.9957671957671957
model_LR.score(test_x,test_y.label)# 线性回归评估R⽅,这⾥是逻辑回归,反馈准确率 TP+TN /(TP+TN+FP+FN)0.9957671957671957
model_LR_result.score(test_x,test_y.label)
0.9957671957671957
model_LR.intercept_ #常数
array([-11.6231361 , 12.79875732, -0.89777407])
f_ #⾃变量系数
array([[ 5.6309648 , 5.62347158, 5.48403264, 5.67384969,
-1.18884631, -2.99224363, -4.67750801],
[ -5.20140083, -5.11971276, -4.73876587, -5.25461372,
-12.56693517, -9.59923801, -2.84616222],
[ -3.39898562, -3.47248496, -3.58589493, -3.443863 ,
4.14845207, 4.4702302 , 4.78672576]])
# 初次训练数据结果
model_result=pd.DataFrame(f_,columns=lumns)
model_result['intercept_']=list(model_LR.intercept_)
model_result['index_labels']=model_result.index
replace_dict_F=dict(zip(list_v,list_k))
model_result.index_labels=model_result.place(replace_dict)
model_result
时间内注册公司数量
(⽉)注册地址重
合
关联公司涉
案
法⼈有涉案记
录
社保⼈数纳税⾦额
法⼈过境记
录
intercept_index_labels
0 5.587753 5.635286 5.478135 5.625104-1.183990
-
3.004709
-4.720270-11.567265⾼风险
1-5.177832-5.174578-4.871483-5.276716
-
12.674818
-
9.616986
-2.89332912.919748中风险
2-3.368405-3.469166-3.546208-3.404291 4.164478 4.501468 4.782409-0.967546低风险
model_result=pd.DataFrame(f_,columns=lumns)
model_result['intercept_']=list(model_LR.intercept_)
model_result['index_labels']=model_result.index
replace_dict_F=dict(zip(list_v,list_k))
注册公司的流程
model_result.index_labels=model_result.place(replace_dict_F)
model_result
时间内注册公司数
量(⽉)注册地址
重合
关联公司
涉案
法⼈有涉案记录(总
次数)
社保⼈数纳税⾦额
法⼈过境
记录
intercept_index_labels
0 5.630965 5.623472 5.484033 5.673850-1.188846
-
2.992244
-
4.677508
-11.623136⾼风险
1-5.201401-5.119713-4.738766-5.254614
-
12.566935
-
9.599238
-
2.846162
12.798757中风险
2-3.398986-3.472485-3.585895-3.443863 4.148452 4.470230 4.786726-0.897774低风险_excel("model_result2.xlsx")
model_LR.predict_proba(test_x)#预测概率
array([[3.78030207e-02, 9.48181444e-01, 1.40155350e-02],
[9.94926758e-01, 5.06952949e-03, 3.71298332e-06],
[9.89677711e-01, 1.03152866e-02, 7.00245255e-06],
...,
[9.93431508e-01, 6.56411707e-03, 4.37517777e-06],
[2.80925603e-07, 6.51573726e-02, 9.34842346e-01],
[9.71592306e-01, 2.84018962e-02, 5.79741552e-06]])
test_y['predict']=model_LR.predict(test_x)
test_y['label_ch']=test_place(replace_dict_F)
test_y['predict_ch']=test_y['predict'].replace(replace_dict_F)
col_0012
row_0
043800
102657
200235 df_sstab(test_y.label_ch.values,test_y.predict_ch.values)# 列名model_LR.predict(test_x) 混淆矩阵
df_roc.loc[list_k,list_k]
col_0⾼风险中风险低风险
row_0
⾼风险42000
中风险02660
低风险04255 test_y.label.value_counts()#验证⾏名为真实值
0 420
1 266
2 259
Name: label, dtype: int64
ics import confusion_matrix # 混淆矩阵包
arr=confusion_matrix(test_y.label_ch.values,test_y.predict_ch.values,labels=list_k)
pd.DataFrame(arr,index=list_k,columns=list_k)
⾼风险中风险低风险⾼风险42000
中风险02660
低风险04255
ics import accuracy_score#准确度
ics import precision_score#查准率
ics import recall_score#查全率
ics import f1_score#F1值
ics import classification_report#分类报告
ics import confusion_matrix#混淆矩阵
ics import roc_curve#ROC曲线
ics import auc#ROC曲线下的⾯积
# ics import specificity_score ⽆这个包
# accuracy_score()#准确度
# precision_score()#查准率
# recall_score()#查全率
# f1_score()#F1值
# classification_report()#分类报告
# # confusion_matrix#混淆矩阵
# roc_curve()#ROC曲线
# auc()#ROC曲线下的⾯积
#由于是三分类全部变成了对0类的评估
print("准确度(率)accuracy_score:",accuracy_score(test_y.label_ch.values,test_y.predict_ch.values))
print("精确率precision_score:",precision_score(test_y.label_ch.values,test_y.predict_ch.values,average='micro')) print("召回率recall_score:",recall_score(test_y.label_ch.values,test_y.predict_ch.values,average='micro'))
print("F f1_score:",f1_score(test_y.label_ch.values,test_y.predict_ch.values,average='micro'))
准确度(率)accuracy_score: 0.9957671957671957
精确率precision_score: 0.9957671957671957
召回率recall_score: 0.9957671957671957
F f1_score: 0.9957671957671957
print(classification_report(test_y.label_ch.values,test_y.predict_ch.values))
precision recall f1-score support
中风险 0.99 1.00 0.99 266
低风险 1.00 0.98 0.99 259
⾼风险 1.00 1.00 1.00 420
accuracy 1.00 945
macro avg 1.00 0.99 0.99 945
weighted avg 1.00 1.00 1.00 945
# import matplotlib.pyplot as plt
# rng = np.random.RandomState(1) # 设置随机种⼦
# x = 5*rng.rand(100) # 100个[0,5)的随机数
# y = 2*x-5+rng.randn(100) # 真实规律的标签取值
# X = pd.DataFrame(x)
# Y = pd.DataFrame(y)
# ex = pd.s([100,1])) #添加⼀列权威1的列,表⽰截距
# data = pd.concat([ex,X,Y],axis=1)
# plt.scatter(X, y,alpha=0.3)
# plt.show()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论