2016-11-12 4 views
0

機械学習アルゴリズムの新機能です。私はscikitのウェブサイトや他のSO投稿を広く読んで、RandomForestClassifierとLinearSVCを使って私の最初の機械学習アルゴリズムを構築しました。単語の頻度を他のデータマシンのフォーマットと結合python

私は医療メモに取り組んでいます。患者の各滞在は、合併症(出血、感染、心臓発作...)に対応するコードに関連付けられます(出血、感染、心臓発作...)

CountvectorizerとtfidfTransformerでフィッティングされ、コードのしかし、私は訓練データセットにもっと多くのデータを追加したいと思っています:長さ、操作の数、操作のタイトル、ICUの滞在時間など...

ウェブとSOを解析した後、すべての連続/バイナリ/スケーリングされた値を単語周波数配列に追加することによって、

例:[0,0,0.34,0,0.45,0, 2, 45](前の1試合countvectorizerとtfdif.fit_transform(train_set)は

しかし、これはデータを結合する総方法、および膨大な数であるように私には思えるのに対し、最後の2つの数字は、データを追加します。言葉の私がように私のデータを設定しようとしました

他人にデータをマスクすることができます:[[0,0,0.34,0,0.45,0],[2],[45]]が、それは動作しません

私は、Web、ない本当の手がかりを捜し、私は最初のものではないかもしれないにもかかわらず。この問題に直面しています...:

あなたの助けのための

おかげ

編集:あなたの詳細な貴重な答えを

感謝。本当に感謝しています。しかし、正確に範囲0-1:{predict_proba}の値(http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier.predict)ですか?私はスコアが予測モデルの精度であることを理解しました。それでは、各変数に応じた予測をすべて行うと、それらの平均はありますか?最終的には、私は複数の出力を扱っているので、出力のそれぞれについて予測を得ることができるので問題はないと思います(btw predict_proba(X)は[array([[0.、1.。]) )、array([[0.2,0.8]]).....]をランダムなフォレストツリー分類子で置き換えます。数字の1つが出力の確率であると思いますが、まだこれを調べていません!)

答えて

0

リストに追加するだけの最初の解決策は正しい解決策です。しかし、これが何を意味しているのか考えるべきです。あなたが100単語を持っていて2つの追加機能を追加した場合、それぞれの特定の単語は、追加された機能(IE)と同じ「重み」を持つことになります。さらに、値が45の最後のフィーチャは、フィーチャの最後の4番目の値(0.45)の100倍になります。

これを回避する一般的な方法の1つは、アンサンブルモデルを使用することです。これらの機能を単語のリストに追加して予測するのではなく、まず単語を使用して予測モデルを作成します。その予測は0-1の範囲内にあり、記事の「感情」を捕らえます。次に、他の変数をスケーリングします(minmaxスケーリング、正規分布など)。最後に、ワードのスコアを最後の2つのスケーリングされた変数と組み合わせ、このようなリストで別の予測を実行します([.86、.2、.65])。このようにして、すべての単語を感情スコアに変換しました。これをフィーチャーとして使用できます。

希望に役立ちます。

ABOVE YOUR UPDATE PER

EDITはい、この例では、あなたがpredict_probaを使用することができますが、すべてが正しくスケーリングされ、そしてあなたは、クラスのためのあなたのターゲットとして1/0を使用している本当に場合は、ドン」 predict_probaは必要ありません。考え方は、単語から予測を取り出し、それを他の変数と組み合わせることです。あなたは予測を平均化しない、予測から予測をする!これはアンサンブル学習と呼ばれます。あなたの予測の出力をフィーチャーとして別のモデルを訓練してください。ここであなたがする必要があるの流れです。 enter image description here

+0

お寄せいただきありがとうございます。本当に感謝しています。予測配列に関する質問のための最初の投稿を編集しました。 – Ryan

+0

上記の編集済みの投稿 – flyingmeatball

+0

ありがとう、私は別の答え(下記)を追加しました。私は本当にあなたがどのように "感情"を計算するのか分かりません! – Ryan

0

お時間をいただきありがとうございました。私はそれを得ると思う。要するに:

  1. 予測単語に基づいて、トレーニングセット(T1)の単語のそれぞれの袋について、あなたは感情を持つ各トレーニングセットの行に対する新しい配列を作成し、「感情」
  2. を引き出します他の値 - >新しいトレーニングセット(t2)
  3. t2に基づいて予測を行います。
  4. 前の手順をテストに適用します。

もう1つ質問ありがとうございます!

「感想」の値は何ですか?単語の各袋のために、私はスパース行列(countvectorizer + tf_idf)を持っています。それでは、あなたはどのように感情を計算しますか?テストの残りの部分をもう一度実行しますか?あなたの感情はclf.predict(X)の値ですか?

+0

感情は、あなたが予測しているもののちょうど省略です。あなたが心不全を予測している場合は、あなたのモデルが持っている確信があります。心電図は、母集団を症例として給餌することで予測し、心不全がある場合は「0」または「1」の別のリストを「クラシファイア1」にして予測します。これは任意のタイプの分類子かもしれませんが、ランダムなフォレストとlinearsvcについて言及しました。 – flyingmeatball

+0

あなたが何を意味するかわかりました。私が理解できないことは、単語を含むトレーニングデータセットとイベント(1/0)があることです。右。私は、単語の新しい袋の予測をするために私のデータセットを訓練し、私は単語の袋に応じてイベントの予測確率を取得します。右。しかし、あなたのスキーマでは、トレーニングデータセットの各行に対して予測があることを理解しています。だから、あなたはあなたの各行がデータセットを訓練しているということを暗示しています。言葉の各袋の感情(すなわち予測)を得るために予測モデルを実行しています。先に「予測から予測する」と定義したもの。 – Ryan

関連する問題