gpt4 book ai didi

python - sklearn LogisticRegression - 图显示的系数太小

转载 作者:太空宇宙 更新时间:2023-11-04 05:12:28 25 4
gpt4 key购买 nike

我正在尝试将逻辑回归模型拟合到 sklearn 的鸢尾花数据集。我得到一条看起来太平坦的概率曲线,也就是系数太小。我希望萼片长度 > 7 的概率超过 90%:

enter image description here

这条概率曲线真的错了吗?如果是这样,是什么原因导致我的代码出现这种情况?

from sklearn import datasets
import matplotlib.pyplot as plt
import numpy as np
import math

from sklearn.linear_model import LogisticRegression

data = datasets.load_iris()

#get relevent data
lengths = data.data[:100, :1]
is_setosa = data.target[:100]

#fit model
lgs = LogisticRegression()
lgs.fit(lengths, is_setosa)
m = lgs.coef_[0,0]
b = lgs.intercept_[0]

#generate values for curve overlay
lgs_curve = lambda x: 1/(1 + math.e**(-(m*x+b)))
x_values = np.linspace(2, 10, 100)
y_values = lgs_curve(x_values)

#plot it
plt.plot(x_values, y_values)
plt.scatter(lengths, is_setosa, c='r', s=2)
plt.xlabel("Sepal Length")
plt.ylabel("Probability is Setosa")

最佳答案

如果你引用http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html#sklearn.linear_model.LogisticRegression ,您会发现一个正则化参数 C,它可以在训练逻辑回归模型时作为参数传递。

C : float, default: 1.0 Inverse of regularization strength; must be a positive float. Like in support vector machines, smaller values specify stronger regularization.

现在,如果您尝试此正则化 参数的不同值,您会发现较大的 C 值会导致拟合曲线具有输出(响应)二进制变量的值从 0 到 1 的过渡更清晰,并且更大的值适合具有高方差的模型(尝试更紧密地模拟训练数据转换,我认为这就是您所期望的,那么您可以尝试将 C 值设为 10 并绘制)但同时可能存在过度拟合,而默认值 C=1 和小于该值的值会导致高偏差并可能欠拟合,著名的 <机器学习中的强偏差-方差权衡

您始终可以使用交叉验证 等技术来选择适合您的C 值。下面的代码/图显示了拟合不同复杂度模型的概率曲线(即正则化参数C的不同值,从110):

x_values = np.linspace(2, 10, 100)
x_test = np.reshape(x_values, (100,1))

C = list(range(1, 11))
labels = map(str, C)
for i in range(len(C)):
lgs = LogisticRegression(C = C[i]) # pass a value for the regularization parameter C
lgs.fit(lengths, is_setosa)
y_values = lgs.predict_proba(x_test)[:,1] # use this function to compute probability directly
plt.plot(x_values, y_values, label=labels[i])

plt.scatter(lengths, is_setosa, c='r', s=2)
plt.xlabel("Sepal Length")
plt.ylabel("Probability is Setosa")
plt.legend()
plt.show()

模型的预测概率装有不同的 C

enter image description here

关于python - sklearn LogisticRegression - 图显示的系数太小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42677382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com