【问题标题】:SKlearn SGD Partial FitSKlearn SGD 部分拟合
【发布时间】:2017-06-28 02:07:28
【问题描述】:

我在这里做错了什么?我有一个大型数据集,我想使用 Scikit-learn 的 SGDClassifier 进行部分拟合

我做以下事情

from sklearn.linear_model import SGDClassifier
import pandas as pd

chunksize = 5
clf2 = SGDClassifier(loss='log', penalty="l2")

for train_df in pd.read_csv("train.csv", chunksize=chunksize, iterator=True):
    X = train_df[features_columns]
    Y = train_df["clicked"]
    clf2.partial_fit(X, Y)

我收到了错误

Traceback(最近一次调用最后一次):文件“/predict.py”,第 48 行,在 sys.exit(0 if main() else 1) 文件“/predict.py”,第 44 行,在 main predict() 文件“/predict.py”,第 38 行,在预测中 clf2.partial_fit(X, Y) 文件“/Users/anaconda/lib/python3.5/site-packages/sklearn/linear_model/stochastic_gradient.py”, 第 512 行,在 partial_fit coef_init=无,intercept_init=无)文件“/Users/anaconda/lib/python3.5/site-packages/sklearn/linear_model/stochastic_gradient.py”, 第 349 行,在 _partial_fit _check_partial_fit_first_call(self, classes) 文件“/Users/anaconda/lib/python3.5/site-packages/sklearn/utils/multiclass.py”, 第 297 行,在 _check_partial_fit_first_call 中 raise ValueError("类必须在第一次调用时传递" ValueError: 类必须在第一次调用时传递给 partial_fit。

【问题讨论】:

  • "所有调用 partial_fit 的类。可以通过 np.unique(y_all) 获得,其中 y_all 是整个数据集的目标向量。第一次调用 partial_fit 和可以在后续调用中省略。注意 y 不需要包含类中的所有标签。 scikit-learn.org/stable/modules/generated/…
  • @JackManey 请发表您的评论作为答案,以便提问者接受和/或关闭问题。

标签: python scikit-learn


【解决方案1】:

请注意,分类器一开始并不知道类的数量,因此对于第一遍,您需要使用 np.unique(target) 告诉类的数量,其中 target 是类列。因为您正在读取块中的数据,所以您需要确保您的第一个块具有类标签的所有可能值,所以它可以工作!因此,您的代码将是:

for train_df in pd.read_csv("train.csv", chunksize=chunksize, iterator=True):
   X = train_df[features_columns]
   Y = train_df["clicked"]
   clf2.partial_fit(X, Y, classes=np.unique(Y))

【讨论】:

    【解决方案2】:

    http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier.partial_fit

    clf2.partial_fit(X, Y, classes=np.unique(Y))
    

    假设您没有足够的类记录,因此分类器需要需要分类的类总数的值。

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 2017-03-10
      • 2022-01-10
      • 2020-05-02
      • 2017-08-12
      • 2018-06-02
      • 2014-05-06
      • 2015-06-15
      • 2020-07-22
      相关资源
      最近更新 更多