sklearn LogisticRegression – 绘图显示的系数过小

我正在尝试使用sklearn的鸢尾花数据集来拟合一个逻辑回归模型。我得到的概率曲线看起来过于平坦,也就是说系数太小。我期望在萼片长度大于7时,概率超过百分之九十:

enter image description here

这个概率曲线确实是错误的吗?如果是的话,我的代码中可能是什么原因导致的?

from sklearn import datasetsimport matplotlib.pyplot as pltimport numpy as npimport mathfrom sklearn.linear_model import LogisticRegressiondata = datasets.load_iris()#get relevent datalengths = data.data[:100, :1]is_setosa = data.target[:100]         #fit modellgs = LogisticRegression()lgs.fit(lengths, is_setosa)m = lgs.coef_[0,0]b = lgs.intercept_[0]#generate values for curve overlaylgs_curve = lambda x: 1/(1 + math.e**(-(m*x+b)))         x_values = np.linspace(2, 10, 100)y_values = lgs_curve(x_values)#plot itplt.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 正则化强度的倒数;必须为正浮点数。就像在支持向量机中一样,较小的值指定更强的正则化。

现在,如果你尝试不同的正则化参数值,你会发现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

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注