問題タブ [grid-search]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cross-validation - 交差検証とグリッド検索の違いは何ですか?
簡単に言えば、交差検証とグリッド検索の違いは何ですか? グリッド検索はどのように機能しますか? 最初に相互検証を行い、次にグリッド検索を行う必要がありますか?
r - Naive Bayes の場合、caret パッケージと klaR パッケージの速度の違い
Naive Bayes モデルを実行していますが、klaR
パッケージを直接使用すると非常に高速で、標準のラップトップで計算するのに 1 秒もかかりません。
mod <- NaiveBayes(category ~ ., data=training, na.action = na.omit)
ただし、caret
パッケージのtrain()
インターフェイス (上記の関数の単なるラッパーだと思っていた) を使用すると、非常に長い時間がかかります。
mod <- train(category ~ ., data=training, na.action = na.omit, method="nb")
これは、train
デフォルトでリサンプリングが含まれているためだと思います。含めてみtrControl = trainControl(method = "none")
ましたが、次のエラーが表示されました。
Error in train.default(x, y, weights = w, ...) :
Only one model should be specified in tuneGrid with no resampling
これが発生する理由や、2 つの関数の速度の違いに関する一般的な考えはありますか?
また、速度の違いが数式インターフェイスに関連している可能性はありますか? 私の予測因子のいくつかは、100 レベルを超える因子です。
python - ランダム化されたグリッド検索をより詳細にするにはどうすればよいですか? (停止しているように見えますが、診断できません)
データセットでランダム化されたグリッド検索を行うことを含む、比較的大きなジョブを実行していますが、(小さな n_iter_search で) すでに長い時間がかかります。
私は 64 コアのマシンで実行しており、約 2 時間、最初のフォールドで 2000 のスレッドをアクティブに保ちました。その後、stdout へのレポートを完全に停止しました。前回のレポートは次のとおりです。
[Parallel(n_jobs=-1)]: Done 4 out of 60 | elapsed: 84.7min remaining: 1185.8min
htop で、ほぼすべてのコアが 0% になっていることに気付きました。これは、ランダム フォレストのトレーニングでは発生しません。プログラムからのフィードバックやエラーはありません。htop がなければ、まだトレーニング中であると思います。これは以前にも発生したため、繰り返し発生する問題です。マシンは完全に反応し、プロセスは生きているように見えます.
私はすでに冗長 = 10 を持っています。RandomizedSearchCV 内で何が起こっているのかを診断する方法について何か考えはありますか?
私がやっているグリッド検索:
rfc = RandomForestClassifier(n_jobs=-1)
param_grid = { 'n_estimators': sp_randint(100, 5000), 'max_features': ['auto', None], 'min_samples_split': sp_randint(2, 6) }
n_iter_search = 20
CV_rfc = RandomizedSearchCV(estimator=rfc, param_distributions=param_grid, n_iter = n_iter_search, verbose = 10,n_jobs = -1)
python - sklearn GridSearchCV (スコアリング関数エラー)
グリッド検索の実行中にエラーが発生しました。グリッド検索が実際にどのように機能するかについての誤解が原因である可能性があると思います。
現在、別のスコアリング関数を使用して最適なパラメーターを評価するためにグリッド検索が必要なアプリケーションを実行しています。RandomForestClassifier を使用して、大きな X データセットを 0 と 1 のリストである特性ベクトル Y に適合させています。(完全にバイナリ)。私のスコアリング関数 (MCC) では、予測入力と実際の入力が完全にバイナリである必要があります。ただし、何らかの理由で ValueError: multiclass is not supported が発生し続けます。
私の理解では、グリッド検索はデータセットに対して交差検証を行い、交差検証に基づく予測入力を考え出し、特性化ベクトルと予測を関数に挿入します。私の特性ベクトルは完全にバイナリであるため、予測ベクトルもバイナリである必要があり、スコアを評価する際に問題は発生しません。(グリッド検索を使用せずに) 単一の定義済みパラメーターを使用してランダム フォレストを実行すると、予測データと特性ベクトルを MCC スコアリング関数に挿入すると、問題なく実行されます。そのため、グリッド検索を実行するとエラーが発生する方法について少し迷っています。
データのスナップショット:
コード:
エラー:
python - Sklearn GridSearchCV、class_weight が不明な理由で機能しない :(
始めようとしてclass_weight
います。残りのコードが機能することはわかっていclass_weight
ますが、エラーが発生するのは次のとおりです。
これが私のコードです
誰かが私が犯している間違いを見つけますか?
scikit-learn - scikit-learn での再帰的特徴除去とグリッド検索の組み合わせ
scikit-learn で再帰的な機能の削除とグリッド検索を組み合わせようとしています。以下のコード (動作) からわかるように、グリッド検索から最適な推定量を取得し、その推定量を RFECV に渡すことができます。ただし、最初に RFECV を実行し、次にグリッド検索を実行したいと思います。問題は、RFECV からグリッド検索にセレクターを渡すと、それが取得されないことです。
ValueError: エスティメータ RFECV の無効なパラメータ ブートストラップ
RFECV からセレクターを取得して RandomizedSearchCV に直接渡すことは可能ですか、それともこれは手続き的に正しいことではありませんか?
python - scikit - 基本推定量として RandomForrestClassifier を使用した CalibratedCV の GridSearchCV
CalibratedCV に埋め込まれた RandomForrestClassifier で GridSearchCV を実行する方法があるかどうか疑問に思っていました。ログの損失を最適化したいので、CalibratedCV で評価を行う必要がありますが、RandomForrest のパラメーターを変更したいと思います。
前もって感謝します
python - 空のモデルを無視するように sklearn でグリッド検索関数を作成する
python と scikit-learn を使用して、グリッド検索を行いたいと思います。しかし、私のモデルのいくつかは空になってしまいます。これらのモデルを無視するようにグリッド検索機能を作成するにはどうすればよいですか?
モデルが空の場合に 0 を返すスコアリング関数を使用できると思いますが、方法がわかりません。
私のデータは、このlearner
オブジェクトがC
空のモデルに対応するを選択するようになっています。モデルが空でないことを確認する方法はありますか?
編集:「空のモデル」とは、使用する機能を0つ選択したモデルを意味します。特にl1
正規化されたモデルでは、これは簡単に起こります。したがって、この場合、C
SVM の が十分に小さければ、最適化問題は係数の最適解として 0 ベクトルを見つけます。したがって、 は s のpredictor.coef_
ベクトルになります0
。
machine-learning - GridSearchCV スコアリング パラメーター: Scoring='f1' または Scoring=None (デフォルトでは精度を使用) を使用すると、同じ結果が得られます。
「scikit Learnで機械学習をマスターする」という本から抜粋した例を使用しています。
決定木を使用して、Web ページ上の各画像が広告または記事のコンテンツであるかどうかを予測します。広告として分類された画像は、カスケーディング スタイル シートを使用して非表示にすることができます。このデータは、インターネット広告データ セット ( http://archive.ics.uci.edu/ml/datasets/Internet+Advertisements )から公開されており、3,279 枚の画像のデータが含まれています。
以下は、分類タスクを完了するための完全なコードです。
例のように GridSearchCV で score ='f1'を使用した結果は次のとおりです。
Scoring =None (デフォルトでは Accuracy メジャー) を使用した場合の結果は、F1 スコアを使用した場合と同じです。
私が間違っていなければ、さまざまなスコアリング関数でパラメーター検索を最適化すると、さまざまな結果が得られるはずです。次のケースは、 scoring='precision'を使用すると異なる結果が得られることを示しています。
Scoring ='precision'を使用した結果は、他の 2 つのケースとは異なります。同じことが「recall」などにも当てはまります。
なぜ 'F1' と None がデフォルトの精度で同じ結果になるのですか??
編集済み
ファビアンとセバスチャンの両方の回答に同意します。問題は、param_grid が小さいことです。しかし、まったく異なる (ここの例ではなく) 非常に不均衡な 100:1 データセット (精度に影響するはずです) を使用し、ロジスティック回帰を使用しているときに、問題が急増したことを明確にしたかっただけです。この場合、「F1」と精度でも同じ結果が得られました。
この場合に使用した param_grid は次のとおりです。
パラメータの選択も小さすぎると思います。
python - ValueError: GridSearch パラメーターを使用する場合、推定器 CountVectorizer のパラメーター モデルが無効です
CountVectorizer() および TfidfTransformer() (TfidfVectorizer()) によって生成される標準の tfidf 機能と、いくつかの言語機能の 2 種類の機能を使用してテキスト分類を行う sklearn パイプラインがあります。さまざまな ngram 範囲を CountVectorizer() に渡してから、GridSearh を使用して最適な n を見つけようとしました。
これが私のコードです:
(問題に関係がないように思われる行をいくつか省略しています。)
しかし、それはエラーをスローします:
TfidfVectorizer() でも同じことが起こります。
ngram_range をパイプラインのベクトライザーに直接渡すと、すべて正常に動作します。
('vect', CountVectorizer(ngram_range=(1,2)))
ありがとう!