[逻辑回归]机器学习-part11

发布于:2025-05-27 ⋅ 阅读:(11) ⋅ 点赞:(0)

十二 逻辑回归

1.概念

逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。

逻辑回归一般用于二分类问题,比如:

是好瓜还是坏瓜

健康还是不健康

可以托付终身还是不可以

2.原理

Sigmoid 函数映射 :然后将线性组合的结果通过 Sigmoid 函数进行映射。Sigmoid 函数的公式为 。它的输出范围在 (0,1) 之间,可以将线性组合的结果转换为概率值。例如,当 z 很大的时候,σ(z) 趋近于 1;当 z 很小的时候,σ(z) 趋近于 0。这样,模型就可以根据这个概率值来判断样本属于正类(如 1)还是负类(如 0)。一般设定一个阈值(如 0.5),当输出概率大于等于这个阈值时,预测为正类;否则预测为负类。

损失函数 - 对数似然损失函数(交叉熵损失) :为了衡量模型预测结果和真实标签之间的差异,逻辑回归采用对数似然损失函数。对于单个样本,其损失函数可以表示为−[y⋅lnσ(z)+(1−y)⋅ln(1−σ(z))],其中 y 是样本的真实标签(0 或 1)。这个损失函数的直观理解是:当模型预测概率和真实标签越接近,损失越小;反之,损失越大。为了得到更好的模型参数,需要最小化这个损失函数。通常使用梯度下降算法来优化模型参数 w 和 b,通过计算损失函数对 w 和 b 的梯度,不断更新它们的值,使得损失函数逐渐减小。

损失函数图:

当y=1时:

通过损失函数图像,我们知道:

当y=1时,我们希望h\theta(x) 值越大越好

当y=0时,我们希望h\theta(x) 值越小越好

综合0和1的损失函数:

手动算一下下:

然后使用梯度下降算法,去减少损失函数的值,这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率.

3.API

逻辑斯蒂

sklearn.linear_model.LogisticRegression()
参数:
    fit_intercept bool, default=True 指定是否计算截距
    max_iter int, default=100  最大迭代次数。迭代达到此数目后,即使未收敛也会停止。
模型对象:
  .coef_ 权重
  .intercept_ 偏置
  predict()预测分类
  predict_proba()预测分类(对应的概率)
  score()准确率

4.示例

# 逻辑回归
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import numpy as np
iris = load_iris()
x = iris.data
y = iris.target
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)

# 标准化
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
# 预测结果 fitt_intercept偏置
model = LogisticRegression(max_iter=1000,fit_intercept=True)
model.fit(x_train,y_train)
y_predict = model.predict(x_test)
# print("预测结果",y_predict)
# print("真实结果",y_test)
# 权重系数
print(model.coef_)
# 偏置b
print(model.intercept_)
y_predict = model.predict_proba(x_test)
# print(y_predict) axis=1 shape是这样的
y_index = np.argmax(y_predict,axis=1)
# print(y_index)
# print(iris.target_names[y_index])
y_pred= model.predict(x_test)
print("score",model.score(x_test,y_test))


网站公告

今日签到

点亮在社区的每一天
去签到