質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.47%

  • Python 3.x

    6911questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

scikit-learnのRandomizedSearchCVエラー

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 362

mimamoru

score 9

import numpy as np
from sklearn import datasets
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
digits = datasets.load_digits()

X,y=digits.data,digits.target

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=0)

clf1=LogisticRegression()
clf2=SVC()

estimators = [('pca', PCA()), 
              ('clf', clf1)]
pipe1 = Pipeline(estimators)

param1 = {'clf__C':[1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
                  'pca__whiten':[True,False],
         } 

gs = GridSearchCV(pipe1, param1)
gs.fit(X_train, y_train)

gs.score(X_test, y_test)

from sklearn.model_selection import RandomizedSearchCV
estimators= [('pca', PCA()), 
              ('clf',SVC())]
pipe2 = Pipeline(estimators)
gamma_range_exp = np.arange(-10.0, 0.0, 3)
gamma_range = 10 ** gamma_range_exp

param2 =[ {'clf__C':[1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
                   'clf__kernel':['linear'],
                  'pca__whiten':[True,False],
                  'pca__n_components': [30, 20, 10]},

                 {'clf__C':[1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
                  'clf__kernel':['rbf'],
                  'gamma': gamma_range,
                  'pca__whiten':[True,False],
                  'pca__n_components': [30, 20, 10]}
               ]

gs = RandomizedSearchCV(pipe2, param2, n_jobs=-1, verbose=2)
gs.fit(X_train, y_train)


エラー内容
AttributeError                            Traceback (most recent call last)
<ipython-input-11-21305e2006cc> in <module>()
12 
13 gs = RandomizedSearchCV(pipe2, param2, n_jobs=-1, verbose=2)
---> 14 gs.fit(X_train, y_train)

~/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py in fit(self, X, y, groups, **fit_params)
616         n_splits = cv.get_n_splits(X, y, groups)
617         # Regenerate parameter iterable for each fit
--> 618         candidate_params = list(self._get_param_iterator())
619         n_candidates = len(candidate_params)
620         if self.verbose > 0:

~/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py in iter(self)
236         # in this case we want to sample without replacement
237         all_lists = np.all([not hasattr(v, "rvs")
--> 238                             for v in self.param_distributions.values()])
239         rnd = check_random_state(self.random_state)
240 

AttributeError: 'list' object has no attribute 'values'

イメージ説明

イメージ説明

イメージ説明

イメージ説明

イメージ説明

1のようにグリットサーチをしたかったのですが、エラーが出てしまいました。
何がちがうのでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • umyu

    2018/05/06 18:17

    質問文のコードは画像で貼らずに、ソースコードをcodeタグで囲って記載していただけませんか。

    キャンセル

回答 2

checkベストアンサー

+3

umyuさんのfixで問題なく動かせました。

python: 3.6.3
numpy: 1.14.2
sklearn: 0.19.1

import numpy as np
from sklearn import datasets
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
digits = datasets.load_digits()

X, y = digits.data, digits.target

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

clf1 = LogisticRegression()
clf2 = SVC()

estimators = [('pca', PCA()), 
              ('clf', clf1)]
pipe1 = Pipeline(estimators)

param1 = {'clf__C': [1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
          'pca__whiten': [True, False]} 

gs = GridSearchCV(pipe1, param1)
gs.fit(X_train, y_train)

print(gs.score(X_test, y_test))

from sklearn.model_selection import RandomizedSearchCV
estimators = [('pca', PCA()), 
              ('clf', SVC())]
pipe2 = Pipeline(estimators)
gamma_range_exp = np.arange(-10.0, 0.0, 3)
gamma_range = 10 ** gamma_range_exp

param2 = {'clf__C': [1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
          'clf__kernel': ['rbf', 'linear'],
          'clf__gamma': gamma_range,
          'pca__whiten': [True, False],
          'pca__n_components': [30, 20, 10]}

print('start')
gs = RandomizedSearchCV(pipe2, param2, n_jobs=-1, verbose=2)
gs.fit(X_train, y_train)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/06 21:54

    >mkgreiさんへ
    お手数をおかけしました。こちらの環境ではjoblibのImportErrorが発生します><

    キャンセル

  • 2018/05/06 22:05

    ありがとうございます。
    確かにmkgreiさんのコードではエラーが出ませんが、'clf__kernel'のlinearにはgammaがないのすよね?計算の無駄になるので、辞書のリストにするようにと学んだのですが違うのでしょうか?
    from sklearn.svm import SVC

    clf = SVC()

    C_range_exp = np.arange(-2.0, 10.0)
    C_range = 10 ** C_range_exp

    gamma_range_exp = np.arange(-10.0, 0.0, 3)
    gamma_range = 10 ** gamma_range_exp

    param = [ {'C': C_range,
    'kernel': ['linear']},

    {'C': C_range,
    'gamma': gamma_range,
    'kernel': ['rbf']} ]

    gs = GridSearchCV(clf, param, n_jobs=-1, verbose=2)
    gs.fit(X_train, y_train)

    のようなコードを参考にしました

    キャンセル

  • 2018/05/06 22:07 編集

    @umyuさん
    windowsと並列計算の相性問題があるようです。
    https://stackoverflow.com/questions/40803684/parallel-error-with-gridsearchcv-works-fine-with-other-methods

    以下のリンクとも関係があるかもしれません。
    https://teratail.com/questions/48266

    キャンセル

  • 2018/05/06 22:14

    ありがとうございます。なかなか難しいですねm(_ _)m
    私はmacで実行しています^ - ^

    キャンセル

  • 2018/05/06 22:18

    @mimamoruさん
    更新タイミングでずれてしまいました。
    GridSearchCVとRandomizedSearchCVでparams_gridの引数のとり方が少し違います。
    GridSearchCVならlistを渡せるのですが、RandomizedSearchCVではdictしか受け付けません。

    確かに無駄があるかもしれません…
    改善法を探ってみます。

    キャンセル

  • 2018/05/06 22:25

    そうだったんですね!ありがとうございます!試しにGridSearchCVにして実行していますが...やはり時間がかかりすぎますね笑
    お二方とも回答ありがとうございました!
    とても勉強になりました!

    キャンセル

  • 2018/05/06 22:25

    http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV

    masked_arrayの使用を検討してみてください。
    Attributes: cv_results_のあたりに記述があります。

    キャンセル

  • 2018/05/06 22:34

    >mkgreiさんへ
    情報ありがとうございました。if __name__ == '__main__':で一連の処理を囲むとjoblibのImportErrorが発生しなくなりました。勉強になりました。

    キャンセル

  • 2018/05/06 23:13

    @mimamoruさん
    いろいろ試してみましたがRandomizedSearchCVでは調整できないかもしれませんね。

    hyperoptなど他のライブラリを検討する必要があるかもしれません。

    @umyuさん
    解決してよかったです。

    キャンセル

  • 2018/05/07 11:54

    ありがとうございました!
    私ももう少し勉強してみます!

    キャンセル

+3

AttributeError: 'list' object has no attribute 'values'


param2 がlistになっているので、[]を外して実行しても同じエラーが発生しますか?

param2 ={'clf__C':[1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
                   'clf__kernel':['linear'],
                  'pca__whiten':[True,False],
                  'pca__n_components': [30, 20, 10]},

                 {'clf__C':[1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
                  'clf__kernel':['rbf'],
                  'gamma': gamma_range,
                  'pca__whiten':[True,False],
                  'pca__n_components': [30, 20, 10]}


追記
VotingClassifierを使いつつGridSearchCV/RandomizedSearchCVでパラメータチューニング


param2 ={'clf__C':[1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
        'clf__kernel':['rbf', 'linear'],
        'clf__gamma': gamma_range,
        'pca__whiten':[True,False],
        'pca__n_components': [30, 20, 10]}


◇実行環境
python: 3.6.5
numpy: 1.13.3
sklearn: 0.19.1
OS: Windows 10
PyCharmより実行。

ImportError: [joblib] Attempting to do parallel computing without protecting your import on a system that does not support forking. To use parallel-computing in a script, you must protect your main loop using "if __name__ == '__main__'". Please see the joblib documentation on Parallel for more information


joblibはどこに・・・


mkgreiさんに教えて頂いたリンクにより質問文のコードを改造した処
Windows環境でもエラーは発生しないようにできました。

import numpy as np
from sklearn import datasets
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.svm import SVC
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.model_selection import RandomizedSearchCV


def main() ->None:
    digits = datasets.load_digits()
    X, y = digits.data, digits.target
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

    clf1 = LogisticRegression()
    clf2 = SVC()
    estimators = [('pca', PCA()),
                  ('clf', clf1)]
    pipe1 = Pipeline(estimators)
    param1 = {'clf__C': [1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
              'pca__whiten': [True, False]}
    gs = GridSearchCV(pipe1, param1)
    gs.fit(X_train, y_train)
    print(gs.score(X_test, y_test))
    estimators = [('pca', PCA()),
                  ('clf', SVC())]
    pipe2 = Pipeline(estimators)
    gamma_range_exp = np.arange(-10.0, 0.0, 3)
    gamma_range = 10 ** gamma_range_exp

    param2 = {'clf__C': [1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
              'clf__kernel': ['rbf', 'linear'],
              'clf__gamma': gamma_range,
              'pca__whiten': [True, False],
              'pca__n_components': [30, 20, 10]}

    print('start')
    gs = RandomizedSearchCV(pipe2, param2, n_jobs=-1, verbose=2)
    gs.fit(X_train, y_train)


if __name__ == '__main__':
    main()

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/06 20:02

    ありがとうございます。
    File "<ipython-input-14-460466b2ce87>", line 6
    {'clf__C':[1e-5, 1e-3, 1e-2, 1, 1e2, 1e5, 1e10],
    ^
    IndentationError: unexpected indent

    というエラーが発生してしまいます。

    キャンセル

  • 2018/05/06 20:16 編集

    あ、ごめんなさい。間違った回答になってしまったので、お手数ですが低評価をお願いします。
    params2の宣言を変更して手元の環境で実行してみましたが。
    別のエラーが発生したので、ちょっと詳しい方を待たれたほうが良いかもしれません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    SQLパラメーター式テーブルの値をand検索する

    実現したいこと fruit_id : 1 -> apple fruit_id : 2 -> mikan fruit_id : 3 -> banana テーブル名 : f

  • 解決済

    pandasで散布図を作成したい

    したいこと 下記のcsvファイルがあります X軸に乗客、y軸にうどんをセットして散布図を作成したいです。 駅,うどん,乗客 青井駅,9,1000 新橋駅,100,1000

  • 解決済

    IntelliJ IDEA でKotlinの実行ができない

    実現したいこと IntelliJ IDEAで Kotlinのプログラムを実行したいです。 しかしエラーが表示されてしまいます。 ソースコード package sampl

  • 解決済

    python エラー

    weights, params = [], [] for c in np.arange(-5, 5): lr = LogisticRegression(C=10**c,

  • 解決済

    JavaでPDFファイルをxml変換する

    前提・実現したいこと JavaでPDFファイルをXMLに変換したいです。 単純にXMLに変換し、出力したいのですが、使用するライブラリやコーディングがわかりません。 該当のソー

  • 解決済

    Python メニューボタン押すと画面切り替えがしたいです。

    前提・実現したいこと Python初心者です。 Pythonとkivyを使ってMac上のアプリケーションを作りたいと思っています。 メニューバーのボタンを押すと、画面が切り替わるよ

  • 解決済

    Pyhon : k 近傍の混同行列

    前提・実現したいこと k 近傍法の実装の正解率の結果を元に混同行列を作成したいのですがどうすればいいのか。(kの大きさごとに混合行列を作成したいため) 該当のソースコード fr

  • 受付中

    pythonで、3次元の回転させられる図のプロット

    jupyternotebook上で3次元の散布図のプロットをしています。 %matplotlib inlineだと図の回転ができないため、 %matplotlib notebo

同じタグがついた質問を見る

  • Python 3.x

    6911questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。