問題タブ [scikit-learn]
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.
python - scikits.learn.hmm.GaussianHMM を可変長トレーニング シーケンスに適合させる
scikits.learn.hmm.GaussianHMM を異なる長さのトレーニング シーケンスに合わせたいと思います。ただし、fit メソッドは、次のようにして、異なる長さのシーケンスの使用を防ぎます。
これは、同じ形状の配列のリストでのみ機能します。続行する方法についてのヒントはありますか?
python - scikit-learn K-Means Clustering を使用して独自の距離関数を指定することは可能ですか?
scikit-learn K-Means Clustering を使用して独自の距離関数を指定することは可能ですか?
python - Scikits-learn:パイプラインと一緒にカスタム語彙を使用する
私のscikits-learnPipelineでは、カスタム語彙をCountVectorizer()に渡したいと思います。
しかし、私が電話するとき私が理解する限り
Pipelineは、myvocabを無視するCountVectorizer()のfit_transform()メソッドを使用します。myvocabを使用するようにパイプラインを変更するにはどうすればよいですか?ありがとう!
python - Scikit-learn は Python GIL をリリースしますか?
複数の 1 クラス SVM を異なるスレッドでトレーニングしたいと考えています。scikit の SVM が GIL をリリースするかどうか知っている人はいますか? オンラインで答えが見つかりませんでした。
ありがとう
python - Python scikits-バッファの次元数が間違っています(予想1、取得2)
このコードスニペットを試しています。私はscikits.learn0.8.1を使用しています
私はこれを手に入れています->
ここの何が問題になっていますか?
python - Scikits.learn 0.8 predict_proba() は一様な確率のみを出力します
Python のscikits.learnパッケージを使用して、勾配方向ヒストグラム機能を使用した部分ベースの顔認識用の分類子をトレーニングしています。特定の顔の部分を認識するように線形 SVM を正常にトレーニングしましたが、predict_proba()
関数に奇妙な問題があります。
次のトレーニング コードを使用します。
しかし、実行すると、出力としてpredict_proba([test_vector])
のみ表示[[ 0.5 0.5 ]]
されます。つまり、2 つのバイナリ クラス間の一様確率です。
奇妙なことに、このpredict()
関数を使用しただけでは、かなりうまく機能し、確かにすべてに均一な確率を簡単に割り当てることはできません。テスト画像では、正しい顔部分の周りではるかに密な「1」分類が得られ、シーンの他の場所でノイズの多い「1」分類が予想されましたが、予想どおり、主にすべての「0」分類が得られました。
この誤動作の原因は何predict_proba()
ですか?
python - 10*10 fold cross validation in scikit-learn?
Is
the right way for 10*10fold CV in scikit-learn? (By changing the random_state to 10 different numbers)
Because I didn't find any random_state
parameter in Stratified K-Fold
or K-Fold
and the separate from K-Fold
are always identical for the same data.
If ShuffleSplit
is the right, one concern is that it is mentioned
Note: contrary to other cross-validation strategies, random splits do not guarantee that all folds will be different, although this is still very likely for sizeable datasets
Is this always the case for 10*10 fold CV?
python - F1 が Scikit-learn の適合率と再現率の両方よりも小さい
不均衡なカテゴリを使用して、マルチクラス分類を行っています。
f1 は常に適合率と再現率の直接調和平均よりも小さく、場合によっては f1 が適合率と再現率の両方よりもさらに小さいことに気付きました。
metrics.precision_score(y,pred)
参考までに、精度などを求めました。
私はミクロ平均とマクロ平均の違いを認識しており、 のカテゴリ結果を使用してミクロではないことをテストしましたprecision_recall_fscore_support()
。
これは、マクロ平均が使用されているためか、その他の理由によるものかわかりませんか?
以下のように詳細な結果を更新しました。
n_samples: 75、n_features: 250
MultinomialNB(alpha=0.01, fit_prior=True)
2 倍の CV:
1 回目の実行:
2 回目の実行:
全体:
Scholarpediaからのマイクロ/マクロ平均化に関する定義:
マルチラベル分類では、カテゴリ全体の集計スコアを計算する最も簡単な方法は、すべてのバイナリ タスクのスコアを平均することです。結果のスコアは、マクロ平均再現率、精度、F1 などと呼ばれます。平均化の別の方法は、最初にすべてのカテゴリの TP、FP、TN、FN、および N を合計してから、上記の各メトリックを計算することです。結果のスコアは、マイクロ平均と呼ばれます。マクロ平均は、各カテゴリに等しい重みを与え、多くの場合、べき乗のような分布でまれなカテゴリ (多数) でのシステムのパフォーマンスによって支配されます。マイクロ平均は、各ドキュメントに均等な重みを与え、多くの場合、最も一般的なカテゴリでのシステムのパフォーマンスによって支配されます。
これは、 Github で現在未解決の問題#83 です。
次の例は、マイクロ、マクロ、および加重 (Scikit-learn の現在の) 平均化がどのように異なるかを示しています。
混同行列:
上記の F5 は F0.5 の省略形です...
python - scikits.learn 分類子から情報を抽出して C コードで使用する方法
Python で scikits.learn を使用して一連の RBF SVM をトレーニングし、結果を Pickled しました。これらは画像処理タスク用であり、テストのためにやりたいことの 1 つは、いくつかのテスト画像のすべてのピクセルに対して各分類子を実行することです。つまり、ピクセル (i,j) を中心とするウィンドウから特徴ベクトルを抽出し、その特徴ベクトルに対して各分類子を実行してから、次のピクセルに移動して繰り返します。これは、Python で行うには遅すぎます。
明確化:「これは遅すぎる...」と言うときは、scikits.learn が使用する Libsvm の内部コードでさえ遅すぎることを意味します。GPU の手動決定関数を実際に書いているので、各ピクセルでの分類が並行して行われます。
Pickle を使用して分類器をロードし、特徴ベクトルから決定がどのように計算されるかを説明するある種の属性を取得し、その情報を自分の C コードに渡すことは可能ですか? 線形 SVM の場合、重みベクトルとバイアス ベクトルを抽出し、それらを C 関数への入力として追加するだけで済みます。しかし、RBF 分類子に対して行う同等のことは何ですか? また、scikits.learn オブジェクトからその情報を取得するにはどうすればよいでしょうか?
追加:ソリューションの最初の試み。
分類子オブジェクトにはsupport_vectors_
、配列の各行としてサポート ベクターを含む属性があるようです。dual_coef_
1×len(support_vectors_)
係数の配列である属性もあります。非線形 SVM に関する標準的なチュートリアルから、次のことを行う必要があるようです。
v
テスト対象のデータ ポイントから特徴ベクトルを計算します。これは の行と同じ長さのベクトルになりますsupport_vectors_
。- の各行について
i
、そのサポート ベクターと の間support_vectors_
の 2 乗ユークリッド距離を計算します。d[i]
v
- は RBF パラメータ
t[i]
として計算gamma * exp{-d[i]}
します。gamma
- 全体を合計し
dual_coef_[i] * t[i]
ますi
。intercept_
scikits.learn 分類子の属性の値をこの合計に追加します。 - 合計が正の場合、1 として分類します。それ以外の場合、0 として分類します。
追加:このドキュメント リンクの番号付きの 9 ページで、実際にintercept_
分類子の属性がバイアス項を保持していることに言及しています。これを反映するために、上記の手順を更新しました。
python - sklearn (scikit-learn) ロジスティック回帰パッケージ -- 分類用のトレーニング済み係数を設定します。
だから私は scikit-learn パッケージの webpate を読みました:
ロジスティック回帰を使用してデータを適合させ、LogisticRegression のインスタンスを取得したら、それを使用して新しいデータ ポイントを分類できます。ここまでは順調ですね。
LogisticRegression() インスタンスの係数を設定する方法はありますか? トレーニング済みの係数を取得した後、同じ API を使用して新しいデータ ポイントを分類したいからです。
それとも、他の誰かが、より優れた API を備えた別の python 機械学習パッケージを推奨していますか?
ありがとう