逻辑回归算法,尽管名字中带有“回归”二字,实际上是机器学习中常用的分类算法之一。它以其直观易懂的数学原理和在Python中的易用性而受到青睐。本文将探讨逻辑回归的基本概念、数学公式、以及如何在Python中实现这一算法。
逻辑回归算法主要用于二分类问题,即目标变量只有两种可能的取值。在逻辑回归的数学公式中,有一个线性模型,例如β0 + β1x,这个线性模型被嵌入到一个逻辑函数(也称为Sigmoid函数)中。最终得到的二分类公式如下所示:
P(yi = 1 | X) = 1 / (1 + e^(-(β0 + β1x)))
其中,P(yi = 1 | X)表示第i个观测值的目标值yi属于类别1的概率。β0和β1是待学习的参数,e代表欧拉数。
逻辑回归公式的主要目标是将线性和/或Sigmoid函数的输出限制在0和1之间。这样做的主要原因是为了可解释性,即可以将输出值解释为简单的概率;如果值大于0.5,则预测类别1,否则预测类别0。
接下来,将通过Python编程语言来实现逻辑回归算法。将使用UCI机器学习库中提供的Ionosphere数据集来进行演示。
# 导入必要的机器学习包
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
# 使用Pandas的read_csv方法读取数据
dataframe = pd.read_csv('ionosphere.data', header=None)
# 设置Pandas DataFrame的显示设置
pd.set_option('display.max_rows', 10000000000)
pd.set_option('display.max_columns', 10000000000)
pd.set_option('display.width', 95)
# 查看DataFrame的形状,即行数和列数
print('This DataFrame Has %d Rows and %d Columns' % (dataframe.shape))
# 打印DataFrame的前五行
print(dataframe.head())
# 从DataFrame中分离出特征矩阵和目标向量
features_matrix = dataframe.iloc[:, 0:34]
target_vector = dataframe.iloc[:, -1]
# 检查特征矩阵和目标向量的形状
print('The Features Matrix Has %d Rows And %d Column(s)' % (features_matrix.shape))
print('The Target Matrix Has %d Rows And %d Column(s)' % (np.array(target_vector).reshape(-1, 1).shape))
# 使用scikit-learn的StandardScaler预处理特征矩阵数据
features_matrix_standardized = StandardScaler().fit_transform(features_matrix)
# 创建逻辑回归算法的实例,并使用默认参数
algorithm = LogisticRegression(penalty='l2', dual=False, tol=1e-4,
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)
# 使用fit方法对特征矩阵和目标向量进行训练
Logistic_Regression_Model = algorithm.fit(features_matrix_standardized, target_vector)
# 创建一个观测值,用于测试模型的预测能力
observation = [[1, 0, 0.99539, -0.05889, 0.8524299999999999, 0.02306,
0.8339799999999999, -0.37708, 1.0, 0.0376,
0.8524299999999999, -0.17755, 0.59755, -0.44945, 0.60536,
-0.38223, 0.8435600000000001, -0.38542, 0.58212, -0.32192,
0.56971, -0.29674, 0.36946, -0.47357, 0.56811, -0.51171,
0.41078000000000003, -0.46168000000000003, 0.21266, -0.3409,
0.42267, -0.54487, 0.18641, -0.453]]
# 存储模型预测的类别值
predictions = Logistic_Regression_Model.predict(observation)
# 打印模型对观测值的预测类别
print('The Model Predicted The Observation To Belong To Class %s' % (predictions))
# 查看模型训练时预测的具体类别
print('The Algorithm Was Trained To Predict One Of The Two Classes: %s' % (algorithm.classes_))
# 打印模型对观测值属于各个类别的概率
print("""The Model Says The Probability Of The Observation We Passed Belonging To Class ['b'] Is %s""" % (algorithm.predict_proba(observation)[0][0]))
print()
print("""The Model Says The Probability Of The Observation We Passed Belonging To Class ['g'] Is %s""" % (algorithm.predict_proba(observation)[0][1]))
通过上述代码,可以看到逻辑回归模型是如何在Python中实现的,以及如何使用它来预测新的观测值属于哪个类别。