逻辑回归是一种分类算法,常用于因变量是二元(两分类)的情况。换言之,当存在两个类别时,可以使用逻辑回归来分析一个二元因变量与一个或多个名义、序数、区间或比率级别自变量之间的关系。本文将带了解如何使用Python中的sklearn库来实现逻辑回归算法,并通过实践学习sklearn库的使用。
将导入pandas、numpy、matplotlib、seaborn和scipy等库,这些库分别用于读取数据、执行数据转换和可视化数据。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import scipy.stats as stats
使用pandas库加载数据集,并检查数据的形状,即列和行的数量。
df = pd.read_csv("Bank_Marketing_project.csv")
df.head()
df.shape
df.describe()
在开始探索性数据分析之前,需要检查数据集中的空值(NaN)并移除或替换它们。
df.isnull().sum()
异常值是相对于最近的数据点和数据集中其他邻近共存值来说极低或极高的数据点。通过绘制箱线图来识别异常值,并使用四分位数方法或Z分数方法来消除异常值。
sns.boxplot(data=df, x='duration')
q3 = df['duration'].quantile(.75)
q1 = df['duration'].quantile(.25)
iqr = q3 - q1
upperrange = q3 + 1.5 * iqr
bottomrange = q1 - 1.5 * iqr
df1 = df[(df['duration'] > bottomrange) & (df['duration'] < upperrange)]
sns.boxplot(data=df1, x='duration', color='purple')
探索性数据分析(EDA)通过数据可视化方法和统计图表来分析数据集,以总结其关键特征。这是一个关键的过程,用于发现异常和模式,测试假设,并使用图形表示来呈现数据摘要。
plt.subplots(figsize=(12,4))
sns.countplot(x='job', hue='y', data=dfnew, palette='colorblind')
plt.ylabel('No. Of Customers')
plt.show()
在机器学习中,经常处理包含多个标签的列的数据集。标签通常以数字或文字的形式存在。标签编码是数据预处理的重要步骤,它将标签转换为从0开始的数字形式,使其成为机器可读的。
from sklearn.preprocessing import LabelEncoder
for column in bank.columns:
if bank[column].dtype == np.number:
continue
bank[column] = LabelEncoder().fit_transform(bank[column])
bank.head()
相关性矩阵是一个显示变量之间相关系数的表格。每个变量都沿着行和列绘制。行和列的交叉点给出了这些变量之间的相关系数。值介于-1和1之间。值越接近-1,变量之间的负相关性越强;值越接近+1,变量之间的正相关性越强。
plt.subplots(figsize=(8,8))
sns.heatmap(bank.corr(), annot=True, fmt='0.0%')
plt.show()
from sklearn.model_selection import train_test_split
X = bank.iloc[:, 1:bank.shape[1]].values
Y = bank.iloc[:, 0].values
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=1)
from sklearn.linear_model import LogisticRegression
logmodel = LogisticRegression(solver='sag', random_state=100, multi_class='ovr')
logmodel.fit(X_train, Y_train)
print(logmodel.score(X_train, Y_train))
print(logmodel.score(X_test, Y_test))
print(logmodel.intercept_)
print(logmodel.coef_)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(Y_test, logmodel.predict(X_test))
TN = cm[0][0]
FN = cm[1][0]
FP = cm[0][1]
TP = cm[1][1]
print(cm)
print('The model testing accuracy = {}'.format((TP+TN)/(TP+TN+FN+FP)))
sns.heatmap(cm/np.sum(cm), annot=True, fmt='.2%', cmap='Blues')
plt.show()