Python代码实现逻辑回归(Logistic回归)原理
概述
Logistic回归是一种二元分类算法,常用于预测用户在某项活动中是否会产生某种行为。它的名字源于其使用的sigmoid函数,该函数可以将任何实数映射到0到1之间的值,因此非常适合概率估计。
本篇攻略将详细讲解如何使用Python实现Logistic回归,包括数据处理、模型训练、参数调整等过程。
数据预处理
首先,我们需要准备数据集。假设我们有一个名为“data.csv”的数据集,它的格式如下:
x1,x2,y
1.2,3.4,0
5.8,2.3,1
...
其中,第一列和第二列分别是输入特征x1和x2,第三列是对应的标签y。我们可以使用Pandas库中的read_csv()方法来读取数据集:
import pandas as pd
data = pd.read_csv('data.csv')
接下来,我们需要将数据集的输入特征和标签分离出来,并将它们转换为Numpy数组的形式:
import numpy as np
X = np.array(data[['x1', 'x2']])
y = np.array(data['y'])
此时,X和y分别是输入特征和标签的Numpy数组。
为了方便后续处理,我们还需要对数据进行标准化处理,即将每个输入特征减去其均值并除以其标准差:
mean = np.mean(X, axis=0)
std = np.std(X, axis=0)
X = (X - mean) / std
模型训练
接下来,我们可以使用Scikit-learn库中的LogisticRegression类来训练模型。代码如下:
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
这样,我们就得到了训练好的Logistic回归模型。
参数调整
经过训练,我们可以使用模型的coef_属性查看每个特征对应的权重(系数):
print(model.coef_)
此时,我们可以选择通过改变参数来提高模型的准确率。其中,最常见的参数是正则化强度C。正则化是用于防止模型过拟合的一种技术,C的值越小,正则化的强度越高,模型的泛化能力也越强。
因此,我们可以使用GridSearchCV类来对C的值进行网格搜索,以找到最佳的超参数配置:
from sklearn.model_selection import GridSearchCV
params = {'C': [0.1, 1, 10, 100]}
grid = GridSearchCV(LogisticRegression(), params, cv=5)
grid.fit(X, y)
print(grid.best_params_)
此时,我们得到的最佳超参数配置可以用来训练更准确的模型。
示例说明
以下是两个示例的说明,演示如何使用Python实现Logistic回归模型。
示例1:波士顿房价预测
假设我们有一个数据集,其中包含了波士顿地区的房屋租金和相关特征。我们可以使用Logistic回归模型来预测某个房屋的租金是否高于平均值,以此来判断其是否溢价。
首先,我们需要加载数据集:
from sklearn.datasets import load_boston
boston = load_boston()
X, y = boston.data, boston.target
接下来,我们需要对数据进行处理:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)
y = (y > y.mean()).astype('int')
此时,X和y分别是输入特征和标签的Numpy数组。
我们可以使用train_test_split()方法将数据集分为训练集和测试集:
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)
接下来,我们可以使用LogisticRegression类来训练模型:
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
训练好模型后,我们可以使用准确率(accuracy)、精确率(precision)、召回率(recall)和F1值(F1 score)等指标来评估模型的性能:
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print('Accuracy:', accuracy)
print('Precision:', precision)
print('Recall:', recall)
print('F1 score:', f1)
最后,我们可以使用matplotlib库将模型的决策边界可视化:
import matplotlib.pyplot as plt
coef = model.coef_.ravel()
plt.scatter(X[:, 5], X[:, 12], c=y, cmap='bwr')
x_axis = np.linspace(X[:, 5].min(), X[:, 5].max(), 10)
y_axis = -(coef[5] * x_axis + model.intercept_) / coef[12]
plt.plot(x_axis, y_axis)
plt.show()
示例2:鸢尾花种类预测
假设我们有一个数据集,其中包含了鸢尾花的花萼长度、花萼宽度、花瓣长度和花瓣宽度等特征,我们可以使用Logistic回归模型来预测其种类。
首先,我们需要加载数据集:
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
接下来,我们需要对数据进行处理:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X = scaler.fit_transform(X)
y = (y > 0).astype('int')
此时,X和y分别是输入特征和标签的Numpy数组。
我们可以使用train_test_split()方法将数据集分为训练集和测试集:
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)
接下来,我们可以使用LogisticRegression类来训练模型:
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X_train, y_train)
训练好模型后,我们可以使用准确率(accuracy)、精确率(precision)、召回率(recall)和F1值(F1 score)等指标来评估模型的性能:
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
precision = precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)
print('Accuracy:', accuracy)
print('Precision:', precision)
print('Recall:', recall)
print('F1 score:', f1)
最后,我们可以使用matplotlib库将模型的决策边界可视化:
import matplotlib.pyplot as plt
coef = model.coef_.ravel()
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='bwr')
x_axis = np.linspace(X[:, 0].min(), X[:, 0].max(), 10)
y_axis = -(coef[0] * x_axis + model.intercept_) / coef[1]
plt.plot(x_axis, y_axis)
plt.show()
总结
本篇攻略介绍了如何使用Python实现Logistic回归模型,包括数据预处理、模型训练、参数调整等过程,并通过两个示例进行了演示。此外,我们还讨论了正则化强度C的作用,并使用GridSearchCV类对其进行了网格搜索。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python代码实现逻辑回归logistic原理 - Python技术站