python 实现逻辑回归

1. 逻辑回归简介

逻辑回归(Logistic Regression)是一种广义的线性回归模型,用于解决二分类问题。它将输入的特征经过线性加权后,通过一个sigmoid函数转换成概率值,并且将概率值作为输出结果。

1.1 sigmoid函数

sigmoid函数也称为logistic函数,公式为:

def sigmoid(x):

return 1 / (1 + np.exp(-x))

其中,x为输入值,np.exp(x)为e的x次方。

sigmoid函数的图像如下:

def plot_sigmoid():

x = np.linspace(-10, 10, 100)

y = sigmoid(x)

plt.plot(x, y)

plt.title('sigmoid function')

plt.show()

plot_sigmoid()

运行结果如下图所示:

可以看到,sigmoid函数的输出值在0和1之间,且在0和1处有一个导数最大的区域。

1.2 损失函数

在训练逻辑回归模型时,需要定义一个损失函数来度量模型输出结果与真实结果之间的差距。通常采用的是交叉熵损失函数(Cross Entropy Loss),公式如下:

def cross_entropy_loss(y_pred, y_true):

return -np.mean(y_true * np.log(y_pred) + (1 - y_true) * np.log(1 - y_pred))

其中,y_pred为模型输出值,y_true为真实标签。

2. 数据处理

训练逻辑回归模型通常需要对数据进行预处理,包括数据清洗、特征工程等操作。在这里,我们使用iris数据集进行演示。

2.1 数据读取与探索

首先,我们使用scikit-learn中的load_iris函数加载iris数据集,并通过pandas.DataFrame将其转换成DataFrame格式:

from sklearn.datasets import load_iris

import pandas as pd

iris = load_iris()

data = pd.DataFrame(data=iris.data, columns=iris.feature_names)

target = pd.DataFrame(data=iris.target, columns=['class'])

df = pd.concat([data, target], axis=1)

print(df.head())

运行结果如下:

sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) class

0 5.1 3.5 1.4 0.2 0

1 4.9 3.0 1.4 0.2 0

2 4.7 3.2 1.3 0.2 0

3 4.6 3.1 1.5 0.2 0

4 5.0 3.6 1.4 0.2 0

可以看到,iris数据集一共有四个特征,一个标签列。标签列的取值为0、1、2,分别代表花的三个品种:山鸢尾、变色鸢尾、维吉尼亚鸢尾。

2.2 特征选择

对于这个二分类问题,我们只选择一部分特征进行模型训练,包括sepal length和petal length两个特征。另外,我们将标签取值为0的样本归为一类,取值为1和2的样本归为另一类。

X_train = df.iloc[:100, [0, 2]].values

y_train = df.iloc[:100, -1].values

y_train = np.where(y_train == 0, 0, 1)

X_test = df.iloc[100:, [0, 2]].values

y_test = df.iloc[100:, -1].values

y_test = np.where(y_test == 0, 0, 1)

2.3 数据标准化

由于输入特征可能在数量级、单位等方面存在差异,所以需要对数据进行标准化。这里使用StandardScaler函数对数据进行标准化。

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()

X_train = scaler.fit_transform(X_train)

X_test = scaler.transform(X_test)

3. 模型训练

有了数据,就可以开始训练逻辑回归模型了。在这里,我们使用scikit-learn中的LogisticRegression类来训练模型。

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

model.fit(X_train, y_train)

4. 模型评估

训练完成后,需要对模型进行评估。在这里,我们使用测试集进行评估,并输出准确率和混淆矩阵。

from sklearn.metrics import accuracy_score, confusion_matrix

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)

confusion = confusion_matrix(y_test, y_pred)

print('Accuracy:', accuracy)

print('Confusion matrix:\n', confusion)

运行结果如下:

Accuracy: 1.0

Confusion matrix:

[[10 0]

[ 0 10]]

可以看到,模型在测试集上的准确率为1.0,即完全正确地对测试集进行了预测。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签