Python 中的 Scikit-learn 更新

Scikit-learn updates in Python

提问前先做个介绍。下面的代码没有出现任何错误,但是,理论上算法应该绘制 图 2,但绘制 图 1。在网上找了一个和我类似的算法,找到了,但是出现一模一样的问题。我还注意到图书馆正在更新,而且每次都变得更好。我比较了 LinearRegression 的花型错误分类样本,之前(我不记得版本)有 8 个或 7 个,最新版本的错误分类样本为 1.

问题1:是否需要对代码进行任何更改才能获得图2?如果答案是否定的,图 1 的解释是什么?。如果答案是肯定的,你应该修改什么,为什么?

问题 2:如何查看库更新,特别是 scikit 学习算法?

import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression


iris = datasets.load_iris()
X = iris.data[:, [2, 3]]
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
sc= StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)


lr=LogisticRegression(C=100.0, random_state=1)
lr.fit(X_train_std,y_train)

weights, params = [], []
for c in np.arange(-5, 5):
   lr = LogisticRegression(C=10.**c, random_state=1)
   lr.fit(X_train_std, y_train)
   weights.append(lr.coef_[1])
   params.append(10.**c)

weights = np.array(weights)
plt.plot(params, weights[:, 0], color='blue', marker='x', label='petal length')
plt.plot(params, weights[:, 1], color='green',  marker='o', label='petal width')
plt.ylabel('weight coefficient')
plt.xlabel('C')
plt.legend(loc='right')
plt.xscale('log')
plt.show()

这对我有用:

lr = LogisticRegression(C=10.**c, random_state=1, multi_class='ovr')

multi_class 是在 scikit-learn 的最新版本中更改了默认值的参数之一。 (另一个参数是 solver)。出于某种原因,将其转化为二元问题可以解决问题,但老实说,并没有太多关于正在发生的事情的线索。 :)