逻辑回归模型

本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》

逻辑回归模型本质就是将线性回归模型通过Sigmoid函数进行了一个非线性转换,得到一个介于0~1之间的概率值。因此,逻辑回归模型的本质是预测概率,而不是直接预测具体类别(如属于0还是1)。

# 1.读取数据
import pandas as pd
df = pd.read_excel('股票客户流失.xlsx')
df.head()

运行结果:
在这里插入图片描述

# 2.划分特征变量和目标变量
X = df.drop(columns='是否流失') 
y = df['是否流失']   

# 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)
#random_state参数赋值为1,该数字没有特殊含义,可以换成其他数字,它相当于一个种子参数,使得每次划分数据的结果一致。

# 4.模型搭建
from sklearn.linear_model import LogisticRegression
model = LogisticRegression() # 设定L2正则化和C参数:penalty='l2',C=10
model.fit(X_train, y_train)

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

正则化的目的是帮助我们减少过拟合现象,它的本质的约束要优化的参数。
L1正则化:根据权重的绝对值的总和来惩罚权重。在依赖稀疏特征的模型中,L1正则化有助于使不相关或几乎不相关的特征权重正好等于0,从而将这些特征从模型中移除。
L2正则化:根据权重的平方和来惩罚权重。L2正则化有助于使离群值的权重接近于0但又不等于0.在线性模型中,L2正则化比较常用。
C值表示正则化的力度。C值越小正则化力度就越大。
运行结果:
在这里插入图片描述

a = pd.DataFrame()
a['预测值'] = list(y_pred)
a['实际值'] = list(y_test)
print(a.head())

运行结果:
在这里插入图片描述

# 预测准确度方法一
from sklearn.metrics import accuracy_score
score = accuracy_score(y_pred, y_test)
print(score)
# 预测准确度方法二
model.score(X_test, y_test)

结果均为0.7977288857345636。

# 6.模型使用2 - 预测概率
y_pred_proba = model.predict_proba(X_test)  
print(y_pred_proba[0:5])

# 数组左列是不流失(分类为0)概率,右列是流失(分类为1)概率
a = pd.DataFrame(y_pred_proba, columns=['不流失概率', '流失概率'])
print(a.head())

运行结果:
在这里插入图片描述
逻辑回归模型在本质上是将线性回归模型通过Sigmoid函数进行非线性转换。本案例共有5个特征变量,所以预测y=1(流失)的概率P的公式如下。
在这里插入图片描述
通过如下代码可以获取上述公式中的系数和截距项,其中model为之前训练的模型名称,通过coef_属性可以获取特征变量前的系数ki,通过intercept_属性可以获取截距项k0。

# 只查看流失(分类为1)概率:“:”表示二维数组的所有行,“1”表示二维数组的第2列
print(y_pred_proba[:,1])

# 7.查看各个特征变量的系数
print(model.coef_)
print(model.intercept_)

运行结果:
在这里插入图片描述

# 批量查看测试集数据的预测概率(前五条)
import numpy as np
for i in range(5):
    print(1 / (1 + np.exp(-(np.dot(X_test.iloc[i], model.coef_.T) + model.intercept_))))

运行结果:
在这里插入图片描述

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值