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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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