在这篇文章中,我们将了解逻辑回归,并看看它在贷款预测中的实际应用。
什么是Logistic回归?
逻辑回归是一种统计和机器学习技术,用于根据输入字段的值对数据集的记录进行分类。假设我们有一个贷款数据集,我们想对其进行分析,以了解哪些客户可能有资格获得贷款。这是历史客户数据,每一行代表一个客户。想象一下,你是这家公司的分析师,你必须要找出客户的贷款资格。你将使用这个数据集来建立一个基于历史记录的模型(即信用评分、教育、收入等),并使用它来预测客户群中未来的流失率。
它与线性回归有什么不同?
Logistic回归类似于线性回归,但它试图预测一个分类或离散的目标领域,而不是数字领域。在线性回归中,我们可能试图预测一个连续的变量值,如房子的价格,病人的血压,或汽车的燃料消耗。但在逻辑回归中,我们预测的变量是二进制的,如是/否、真/假、成功或不成功,等等。
实施。
现在让我们看看你如何在数据集上使用逻辑回归。你可以从这里下载贷款数据集。首先,我们必须导入所需的包。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
从你的本地导入训练和测试集。
df_test=pd.read_csv(r"local-path/loan-test.csv")
df_train=pd.read_csv(r"local-path/loan-train.csv")
df_train
你可以在你的视图中看到数据集,看看它有哪些特征。


在继续前进之前,我们需要检查缺失值并对数据进行预处理。在进行任何类型的模型训练或预测之前,都要这样做,这是一个好习惯。让我们开始吧。
df_train.isnull().sum()


我们可以看到,在这个数据集中有许多缺失值或空值。现在,由于这个数据集相当小,消除这些行并不是一个好的选择。它不会给我们的数据集带来正确的预测。因此,我们需要填补这些缺失值。一种方法是用该列中的最大值来填补。让我们看看如何做到这一点。
print(df_train.Gender.value_counts())
print(df_test.Gender.value_counts())


在这里,我们的性别的最大计数是男性。因此,让我们填补它们。
#Filling missing values with male
df_train["Gender"]= df_train["Gender"].fillna("Male")
df_test["Gender"]= df_test["Gender"].fillna("Male")
同样地,我们将对所有其他有缺失值的特征进行填补。
#Filling missing value with yes
df_train["Married"]= df_train["Married"].fillna("Yes")
df_test["Married"]= df_test["Married"].fillna("Yes")
#Filling missing values with 0
df_train["Dependents"]= df_train["Dependents"].fillna(0)
df_test["Dependents"]= df_test["Dependents"].fillna(0)
#Filling Missing values with No
df_train["Self_Employed"]= df_train["Self_Employed"].fillna("No")
df_test["Self_Employed"]= df_test["Self_Employed"].fillna("No")
#Filling missing values as mean of Loan Amount
df_train['LoanAmount']= df_train['LoanAmount'].fillna(df_train['LoanAmount'].mean())
df_test['LoanAmount']= df_test['LoanAmount'].fillna(df_test['LoanAmount'].mean())
#Filling missing values with 360
df_train["Loan_Amount_Term"]= df_train["Loan_Amount_Term"].fillna(360)
df_test["Loan_Amount_Term"]= df_test["Loan_Amount_Term"].fillna(360)
#Filling Missing values with 1.0
df_train["Credit_History"]= df_train["Credit_History"].fillna(1.0)
df_test["Credit_History"]= df_test["Credit_History"].fillna(1.0)
很好,现在我们已经填补了所有的缺失值。让我们检查一下。
df_train.isnull().sum()


现在我们可以使用标签编码器来规范我们的列数据集。让我们开始吧。
from sklearn import preprocessing
labelEncoder = preprocessing.LabelEncoder()
df_train['Gender']= labelEncoder.fit_transform(df_train['Gender'])
df_test['Gender']= labelEncoder.fit_transform(df_test['Gender'])
df_train['Dependents']=labelEncoder.fit_transform(df_train['Dependents'])
df_test['Dependents']=labelEncoder.fit_transform(df_test['Dependents'])
df_train['Married']= labelEncoder.fit_transform(df_train['Married'])
df_test['Married']= labelEncoder.fit_transform(df_test['Married'])
df_train['Education']= labelEncoder.fit_transform(df_train['Education'])
df_test['Education']= labelEncoder.fit_transform(df_test['Education'])
df_train['Self_Employed']= labelEncoder.fit_transform(df_train['Self_Employed'])
df_test['Self_Employed']= labelEncoder.fit_transform(df_test['Self_Employed'])
df_train['Property_Area']= labelEncoder.fit_transform(df_train['Property_Area'])
df_test['Property_Area']= labelEncoder.fit_transform(df_test['Property_Area'])
df_train['Loan_Status']= labelEncoder.fit_transform(df_train['Loan_Status'])
现在我们可以创建我们的模型了。我已经选择了Loan_ID和Loan_Status作为我的特征。你也可以自由发挥其他特征。
#Building Model
x = df_train.drop(columns= ["Loan_ID","Loan_Status"],axis=1)
y = df_train["Loan_Status"]
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=42)
sklearn库可以用来进行逻辑回归,如图所示,使用Logistic Regression类,只需几行即可。
from sklearn.linear_model import LogisticRegression
model=LogisticRegression()
model.fit(x_train,y_train)
print(model.score(x_test,y_test))
print(model.score(x_train,y_train))
我们将得到的输出分数为:


总结
我们看到了如何对数据集使用逻辑回归算法。希望这也能让读者了解在建立模型之前需要做哪些基本步骤。