問題タブ [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 - Scikit-まばらな文字列分類でナイーブベイズの不可解な結果を学ぶ
テキスト分類にscikitlearnモジュールを使用しようとしています。ユニークな単語がたくさんあるデータセットです。その性質は、次の例から明らかになります。
出力は次のようになります。
これは多項の例ですが、ベルヌーイの例と同じ結果が得られます。私は0から1000000までのアルファ値で試しました。なぜこれが当てはまるのか誰かが私に説明できますか?
編集:私はそれを明確にすべきでした、次のクラスが存在しますCall of Duty:Modern Warfare、Call of Duty:Modern Warfare 2 ...他のほとんどのゲーム、すべてのプレイステーションゲームのリストはウィキペディアから取られました。
また、フルバージョン、たとえばCall of Duty:Modern Warfare 2をテスト文字列として使用すると、同じ結果が得られます。
私はもともとNLTK分類子を使っていましたが、どういうわけか、他の例にはない「角とう」のような価値のある単語をあまり配置していませんでした。(明らかにScikitのものはそうです)それはscikit分類子がするように数に問題がありませんでした。
ここでのガイダンスや情報は非常に価値があります。
ありがとう
編集:データセットはここからhttp://en.wikipedia.org/wiki/List_of_PlayStation_3_gamesの最初の列にあり、各例には同じラベルとコンテンツがあります
python - scikit-learn の分類アルゴリズムのテキスト機能入力形式
私は、scikit-learn を使用して NLP を実行し始めています。私はすでに NLTK の分類子をいくつか使用していますが、今は scikit-learn に実装されている分類子を試してみたいと思っています。
私のデータは基本的に文であり、それらの文のいくつかの単語から特徴を抽出して、分類タスクを実行します。私の機能のほとんどは名目上のものです: 単語の品詞 (POS)、単語を左に、POS 単語を左に、単語を右に、POS 単語を右に-右、ある単語から別の単語への構文関係のパスなど
NLTK 分類子 (デシジョン ツリー、単純ベイズ) を使用していくつかの実験を行ったとき、機能セットは、機能に対応する値 (公称値) を含む単なる辞書でした。例: [ {"postag":"名詞", "wleft":"家", "パス":"VPNPNP",...},.... ]。これを分類子に渡すだけで、彼らは仕事をしてくれました。
これは使用されるコードの一部です:
抽出された機能セットの 1 つの例を次に示します。
前に述べたように、ほとんどの機能は名目上のもの (文字列値) です。
さて、scikit-learn パッケージの分類子を試してみたいと思います。私が理解しているように、このタイプの機能セットは、sklearn に実装されているアルゴリズムには受け入れられません。すべての機能値は数値でなければならず、配列または行列でなければならないからです。したがって、DictVectorizer クラスを使用して「元の」機能セットを変換しました。ただし、この変換されたベクトルを渡すと、次のエラーが発生します。
DictVectorizer() を使用すると、これらのエラーが発生します。ただし、DictVectorizer(sparse=False) を使用すると、コードがトレーニング部分に到達する前でもエラーが発生します。
このエラーのため、スパース表現を使用する必要があることは明らかです。
問題は、scikit-learn が提供する分類アルゴリズムを使用するために、名目上の特徴をどのように変換すればよいかということです。
あなたが私に与えることができるすべての助けを前もってありがとう.
アップデート
以下の回答で示唆されているように、scikit-learn に NLTK ラッパーを使用しようとしました。分類子を作成するコード行を変更しました。
次に、「train」メソッドを呼び出すと、次のようになります。
したがって、機能が名目上のものであるため、ラッパーは疎行列を作成できないようです。それでは、元の問題に戻ります。
java - 確率推定による分類のためのML手法
OCRシステムを実装したい。プログラムが認識しようとしている文字を間違えないようにする必要があります。それらの多くを認識できないかどうかは関係ありません(つまり、リコールが低くても高精度で問題ありません)。
誰かが私がこれに適したMLアルゴリズムを選択するのを手伝ってもらえますか?私は周りを見回していて、いくつかの紛らわしいものを見つけました。たとえば、SVMについて矛盾するステートメントを見つけました。scikits learn docsで、SVMの確率推定値を取得できないことが言及されました。一方、 WEKAでこれを行うことが可能であるという別の投稿を見つけました。
とにかく、私はこの目的に最適な機械学習アルゴリズムを探しています。アルゴリズムのライブラリも提案できれば素晴らしいと思います。私はPythonベースのソリューションを好みますが、Javaでも問題ありません。
python - 交差検定のための追加のフィッティングパラメーター
を使用して、を使用するときに、分類子scikit-learn
のメソッドに追加のパラメーターを渡す方法はありますか?たとえば、分類子のまたはをどのように指定しますか。fit
cross_val_score
sample_weight
class_prior
MultinomialNB
python - scikit-learnでの多項式カーネルでのサポートベクター分類器の使用
NLPタスクを実行するために、scikit-learnパッケージに実装されているさまざまな分類子を試しています。分類を実行するために使用するコードは次のとおりです
コードからわかるように、私はサポートベクターマシン分類器の2つの実装をテストしています。LinearSVCと多項式カーネルを使用したSVCです。さて、私の「問題」について。LinearSVCを使用すると、問題なく分類できます。テストインスタンスはいくつかのラベルでタグ付けされています。ただし、多項式SVCを使用する場合、すべてのテストインスタンスは同じラベルでタグ付けされます。考えられる理由の1つは、単純に、多項式SVCは私のタスクに使用する適切な分類子ではないということですが、それは問題ありません。多項式SVCを適切に使用していることを確認したいだけです。
あなたが私に与えることができるすべての助け/アドバイスをありがとう。
更新 回答に示されている推奨事項に従って、分類子をトレーニングするコードを変更して、次のことを実行します。
今、私は次のメッセージを受け取ります:
これは、トレーニングデータ内のクラスのインスタンスの不均一な分布と関係がありますよね?または、プロシージャを誤って呼び出していますか?
python - scikit-learn GMM は正の対数確率を生成します
私はpython scikit-learnパッケージのガウス混合モデルを使用してデータセットをトレーニングしていますが、コーディング時にそれを見つけました
-- G=mixture.GMM(...)
-- G.フィット(...)
-- G.score(合計機能)
結果の対数確率は正の実数です...なぜですか? 対数確率は負であることが保証されていませんか?
わかった。ガウス混合モデルが返すものは、確率「質量」ではなく対数確率「密度」であるため、正の値は完全に合理的です。
共分散行列が特異値に近い場合、GMM はうまく機能しません。一般に、データがそのような生成タスクに適していないことを意味します。
python - Scikit GradientBoostingClassifier で最小二乗回帰を使用できないのはなぜですか?
なぜそれができるのですか
次のエラーで失敗します:
それは完璧に動作しloss='deviance'
ますか?
Ubuntu 64ビットでscipy-0.11.0rc1でscikit-learn-0.11を使用していますこれは、バイナリクラス「YES」「NO」でデータセットを分類するときに発生しました。
python - EnthoughtCanopyディストリビューションに含まれるscikit-learnのアップグレードバージョン
scikit-learn v0.11に付属しているEPD7.3.1(現在はEnthought Canopyと呼ばれています)をインストールしています。Ubuntu12.04を実行しています。scikit-learnのv0.12をインストールする必要があります。
scikit-learnドキュメントには、リポジトリのクローンを作成し、scikit-learnディレクトリをPYTHONPATHに追加して、拡張機能を適切に構築すると記載されています。python setup.py build_ext --inplace
問題は、EPDがそれ自体の閉じた世界(複数のscikit dirsを含む)であるということです。
./lib/python2.7/site-packages/scikits/
./lib/python2.7/site-packages/sklearn
そして、次のようなものがあります。
./EGG-INFO/scikit_learn/
この時点まで物事を調整するのに非常に長い時間がかかったので、私は本当に実験したくありません。この場合、scikit-learnの指示に従う必要がありますか?
python - 単純ベイズ (Python、scikit) で疎行列/オンライン学習を使用する
6,000,000 を超えるエントリと各エントリ 150k の機能を持つデータセットで Naive Bayes を実行しようとしています。次のリンクからコードを実装しようとしました: Implementing Bag-of-Words Naive-Bayes classifier in NLTK
問題は (私が理解しているように)、パラメーターとして dok_matrix を使用して train-method を実行しようとすると、 iterkeys が見つからないことです (ラベルとして OrderedDict と行をペアにしました):
私の質問は、分類器のエントリごとに (オンラインで) 教えることによって疎行列の使用を避ける方法があるか、またはこの場合に dok_matrix の代わりに効率的に使用できる疎行列形式があるかどうかです。それとも、明らかな何かが欠けていますか?
誰の時間もありがとう。:)
編集、9月6日:
iterkeys が見つかったので、少なくともコードは実行されます。32k のサイズのデータセットで数時間かかり、まだ完了していないため、まだ遅すぎます。現時点で得たものは次のとおりです。
問題は、取得される各行がベクトルの疎性を利用せず、150k の各エントリを通過することです。問題の続きとして、この単純ベイズをスパース行列で利用する方法を知っている人はいますか、または上記のコードを最適化する他の方法はありますか?
python - Pandas & Scikit: DataFrame をスライスするときのメモリ使用量
DataFrame
csv ファイル (約 300MB) からロードされた大きな があります。
ここから、 で使用する数十の機能を抽出していますRandomForestClassifier
。一部の機能は、データ内の列から単純に派生したものです。次に例を示します。
DataFrame
また、元のデータフレームのインデックスを使用して、numpy 配列から新しい s として作成されるものもあります。
これらの機能はすべて 1 つに結合されますDataFrame
。
そして、ランダム フォレスト分類器をトレーニングします。
はこれらのRandomForestClassifier
機能で問題なく動作し、ツリーの構築には O (数百メガバイトのメモリ) が必要です。ただし、データをロードした後、その小さなサブセットを取得した場合:
次に、ランダム フォレストのツリーを構築すると、フィーチャのサイズが元の O(10%) になっているにもかかわらず、突然何ギガバイトものメモリが必要になります。DataFrame
これは、データのスライスされたビューでは、それ以上のスライスを効率的に実行できないためであると考えられます (ただし、これがどのように features 配列に伝播するかはわかりません)。
しかし、これは役に立ちません。
- データのサブセットを取得すると、メモリ使用量が大幅に増加するのはなぜですか?
DataFrame
物事を再び効率的にする可能性のある a を圧縮/再配置する他の方法はありますか?