【逻辑回归-银行客户】

逻辑回归:从理论到实践

在本文中,我们将介绍一种被广泛用于二分类问题的机器学习模型——逻辑回归。我们将通过一个实例,深入解析如何在 Python 环境中实现逻辑回归。

源数据下载链接

1. 什么是逻辑回归?

逻辑回归是一种用于解决二分类问题的监督学习模型。它的主要思想是:首先将输入特征与线性回归模型相结合,然后将线性回归的输出通过一个称为 sigmoid 函数的特殊函数转换,使得其输出值落在 (0, 1) 之间,代表了正类的概率。具体地,逻辑回归模型的形式可以表示为:

其中,(P(Y=1|X)) 是在给定输入特征 (X) 的情况下,目标变量 (Y) 为正类的概率;(w_0, w_1, …, w_n) 是模型需要学习的参数;(X_1, X_2, …, X_n) 是输入特征。这个方程的右侧部分就是 sigmoid 函数,其图像是一个 S 形曲线,可以将任何实数映射到 (0, 1) 之间。

2. Python 实现逻辑回归:

接下来,我们将通过一个完整的例子来展示如何在 Python 中实现逻辑回归模型。

2.1 数据预处理

在进行机器学习模型的训练之前,我们首先需要对数据进行预处理。在这个例子中,我们使用了一个名为 “bank-full.csv” 的数据集。这个数据集包含了一些银行客户的信息,以及他们是否订阅了定期存款(这是我们的目标变量,用 “y” 表示)。

首先导入了所需的库,并读取数据集:

import pandas as pd
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import seaborn as sns

sns.set(style='white')
sns.set(style='whitegrid', color_codes=True)

data = pd.read_csv('bank-full.csv', sep=';', quotechar='"', header=0)
data.dropna(inplace=True)
print(data.head())
print(data.shape)
print(list(data.columns))

然后,我们对数据集中的每个属性的所有可能值进行了查询:

data['education'].unique()
print("education的所有可能值:")
print(data['education'].unique())
...

查询了目标变量 “y” 的值的分布,并通过柱状图进行可视化:

data['y'].value_counts()
print(data['y'].value_counts())

sns.countplot(x='y', data=data, palette='hls')
plt.show()

# 计算y值分布的百分比
count_no_sub = len(data[data['y'] == 'no'])
count_sub = len(data[data['y'] == 'yes'])
pct_of_no_sub = count_no_sub / (count_no_sub + count_sub)
print('未开户的百分比:%.2f%%' % (pct_of_no_sub * 100))
pct_of_sub = count_sub / (count_no_sub + count_sub)
print('开户的百分比:%.2f%%' % (pct_of_sub * 100))

通过计算y值分布得知,原始数据集的分布不均匀,需要对其进行处理






对不是数值型的数据进行独热编码

# 对分类变量(cat_vars)进行独热编码
cat_vars = ['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', 'month', 'poutcome']
for var in cat_vars:
    cat_list = pd.get_dummies(data[var], prefix=var)
    data = data.join(cat_list)
data_final = data.drop(cat_vars, axis=1)

print(data_final.columns.values)


由于之前发现原始数据集关于y值的分布并不均匀,所以需要对其处理,使用smote方法对数据进行过采样。

# 使用smote方法对数据进行过采样
from imblearn.over_sampling import SMOTE
X = data_final.loc[:, data_final.columns != 'y']
y = data_final.loc[:, data_final.columns == 'y'].values.ravel()

os = SMOTE(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

columns = X_train.columns
os_data_X, os_data_y = os.fit_resample(X_train, y_train)
os_data_X = pd.DataFrame(data=os_data_X, columns=columns)
os_data_y = pd.DataFrame(data=os_data_y, columns=['y'])

# 检查过采样后的数据
print('过采样后的数据个数:', len(os_data_X))
print('未开户的个数:', len(os_data_y[os_data_y['y'] == 'no']))
print('开户的个数:', len(os_data_y[os_data_y['y'] == 'yes']))
print('未开户的百分比:%.2f%%' % (len(os_data_y[os_data_y['y'] == 'no']) / len(os_data_X) * 100))
print('开户的百分比:%.2f%%' % (len(os_data_y[os_data_y['y'] == 'yes']) / len(os_data_X) * 100))

2.2 模型训练和评估

在完成了数据预处理之后,我们就可以开始训练我们的逻辑回归模型了。在这个过程中,我们会使用到 sklearn 库的 LogisticRegression 类。我们首先会将数据集划分为训练集和测试集,然后在训练集上训练模型,在测试集上评估模型的性能。

# 逻辑回归模型
from sklearn.linear_model import LogisticRegression
from sklearn import metrics

logreg = LogisticRegression()
logreg.fit(os_data_X, os_data_y.values.reshape(-1))
# 使用逻辑回归模型进行预测
y_pred = logreg.predict(X_test)
print('逻辑回归模型的准确率:', metrics.accuracy_score(y_test, y_pred))

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

# 可视化混淆矩阵
from sklearn.metrics import confusion_matrix
confusion_matrix = confusion_matrix(y_test, y_pred)
print(confusion_matrix)

# 计算和绘制二分类模型的 ROC 曲线和计算 ROC AUC 分数
from sklearn.metrics import roc_auc_score, roc_curve
from sklearn.preprocessing import LabelEncoder

# 创建 LabelEncoder 实例
le = LabelEncoder()

# 将目标变量和预测结果编码为数值标签
y_test_encoded = le.fit_transform(y_test)
y_pred_encoded = le.transform(logreg.predict(X_test))

# 计算 ROC AUC 分数
logit_roc_auc = roc_auc_score(y_test_encoded, y_pred_encoded)

# 计算 ROC 曲线
fpr, tpr, thresholds = roc_curve(y_test_encoded, logreg.predict_proba(X_test)[:, 1])

# 绘制 ROC 曲线
plt.figure()
plt.plot(fpr, tpr, label='Logistic Regression (area = %0.2f)' % logit_roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

结果如下:

混淆矩阵:

3. 结论

逻辑回归可以应用于各种二分类问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: sklearn是一个常用的机器学习库,逻辑回归是其中的一个算法模型。逻辑回归用于解决分类问题,将一系列输入变量映射到离散的输出变量(二分类问题)。下面以一个电子商务网站用户是否购买广告的案例来说明如何使用sklearn的逻辑回归模型。 首先,我们要导入需要使用的库。例如使用numpy进行数值计算,使用pandas进行数据处理,使用sklearn中的逻辑回归模型。 接下来,我们要加载数据集。可以使用pandas库的read_csv()函数将CSV文件加载到DataFrame中,根据数据的特点进行数据清洗和处理。 然后,我们需要将数据集切分为特征数据和目标数据。特征数据是用来训练模型的输入变量,而目标数据是期望模型预测的结果。 对于逻辑回归模型来说,我们需要进行特征缩放。可以使用sklearn中的StandardScaler()函数对特征数据进行标准化处理。 然后,我们可以创建逻辑回归模型对象,并使用训练集对模型进行训练。可以使用sklearn中的LogisticRegression()函数来创建模型对象。 接着,我们可以使用测试集对模型进行评估。可以使用模型对象的score()函数来计算测试集上的准确率。 最后,我们可以使用训练好的模型进行预测。可以使用模型对象的predict()函数来对新的数据进行分类预测。 通过以上步骤,我们可以完成一个使用sklearn逻辑回归模型的案例。逻辑回归模型在实际应用中非常常见,可以用于各种二分类问题的解决,如垃圾邮件分类、疾病预测等。 ### 回答2: Scikit-learn是一个开源机器学习库,提供了丰富的算法和工具,以支持各种机器学习任务。逻辑回归是Scikit-learn中一个常用的分类算法逻辑回归是一种用于预测分类变量的统计学方法。它假设输入变量与输出变量之间存在着线性关系,并使用sigmoid函数来将线性预测转化为概率。在Scikit-learn中,我们可以使用LogisticRegression类来实现逻辑回归算法。 下面以一个二分类问题的案例来介绍逻辑回归在Scikit-learn中的应用。 首先,我们需要准备训练数据集和测试数据集。训练数据集包含了特征变量(X)和对应的类别标签(y),而测试数据集只包含特征变量。 然后,我们可以使用LogisticRegression类来创建逻辑回归模型,并使用fit方法来拟合训练数据集。拟合完成后,模型将学习到最优的参数。 接下来,我们可以使用predict方法来使用训练好的模型进行预测。给定一组特征变量,模型将输出对应的类别标签。 最后,我们可以使用score方法来评估模型的性能。它将返回模型在测试数据集上的准确率,即预测正确的样本数与总样本数的比例。 总结来说,Scikit-learn的逻辑回归模块提供了一种强大的工具,用于处理二分类问题。通过预处理数据、拟合模型、进行预测和评估性能,我们可以使用这个模块来实现一个完整的逻辑回归案例。模型的预测结果可以帮助我们了解输入变量与输出变量之间的关系,并作出相应的决策。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

武帝为此

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值