2017-07-20 32 views
0

機械学習プロジェクトで自分のデータテーブルを使用する方法をよりよく理解するために取り組んでいます。機械学習データのフォーマット

私のカテゴリは次のとおりです。soldindays

[categoryname, modelitem, price, soldindays] 

が対象となります。私は良い予測を得るためにデータを再フォーマットするかどうかは全くわからないんだけど

categoryname/modelitem/price/soldindays 
furniture /chair /100 /22 
wood  /table /79 /4 
glass  / tv /190 /9 
cardboard /desk /493 /198 

私のデータテーブルは、この形式で120万行があります。これまでのところ、私はK nearest neighbros = 1を使用しましたが、どういうわけか5%と78%の間で変化する精度レベルを得ています。これは私が訓練することを選択したデータによって大きく異なるようです。私はただの部分の代わりにそのすべてを鍛えようとします。

データを書式設定するときは、数値以外のすべての項目を数値に変換していました。私はすべての非数値属性の一意の値を数えました。次に、各リスト内の各項目をアルファベット順に並べ、各項目をその順序位置にマッピングしました。例えば

:私はいくつかの理由で悪い精度を持っている可能性が知っているが、私はデータフォーマットはおそらくだと思い

categoryname/modelitem/price/soldindays 
1878 /87 /100/22 
197 /290 /79 /4 
2854 /785 /190/9 
1148 /401 /493/198 

map_categorynames = [aarvarks = 1, airplanes = 2] 
map_modelitems = [feet = 1, shoes = 2] 

それは次のように出てきました最大。どのように私のフィーチャを数値的にフォーマットすることができますか、どのタイプのモデル/セットが私の「タイプ」の問題に適しているのでしょうか?

私の最初の属性categorynameは、modelitemのように約1000種類のカテゴリを持っています。 priceおよびsoldindaysは、0~10000の整数である。出力は、指定されたアイテムがその属性を与えられて販売されるのにどれくらいかかるかを知るために、soldindaysを予測することです。

私はビデオを読んで鑑賞し、すべてを理解するために最善を尽くしてきましたが、著者の間には非常に多くのバリエーションがあり、単一の教育機関に固執するのが難しいときに知識を蓄積するのは困難です。

答えて

1

問題のタイプ

最も重要なのは、これは回帰型の問題ではなく、分類であることに注意してください。あなたは正確な答えを得ることなく(またはすべてのクレジットを失うことなく)正しい日数にできる限り近づけたいと思っています。達成基準はではなく、である必要があります。むしろ、何らかの平均エラーパーセンテージでなければなりません。あなたは、独立した分類予測で動作するテクニックを捨てることができます。

データSHAPE

どのようにあなたのデータは、正確な予測を行うのに十分な情報が含まれていることを知っていますか?通常、この発見はさまざまなMLアルゴリズムを試すことによって得られます。最大限の精度を見積もるために、空間上の視覚化や何らかの相関関係を行ったことがありますか?

現在のメソッド

KNNは、このためにない良いです。 2つの文字列のフィーチャは、線形連続体に配置することによって正しく記述されません。与えられたエンコーディングは、aardvarkがであり、多くはで、シマウマよりも飛行機に密接に関連していることを示しています。これらを分離する必要があります。 Matthijsがすでに指摘しているように、ワンホットエンコーディングは、これらを直交フィーチャに分離する理想的な方法です。

modelitemの機能はカテゴリから独立していますか?もしそうなら、それもワンホットエンコードされるべきです。それが依存している場合は、カテゴリのサブタイプです。それでは、より難しい問題があります。つまり、メジャーを分離している間にセカンダリディスクリミネータを関連付けます。これは意思決定ツリーが良いツールである場所です。

一般的な推奨

ように多くの入門講義から標準的な住宅価格の一例の線に沿って、古典的な回帰問題としてこれを扱います。まず、SGDと関連するアルゴリズムを調べてください。満足のいく結果が得られない場合、少なくとも出発点は確かであり、洗練された問題を再度投稿することができます。

1

現在、LabelEncodingと呼ばれる方法を使用してカテゴリをエンコードしています。ところで、SKLearnにはmethodがあります。

このメソッドをエンコードに使用し、最近隣などのモデルを使用すると、アルファベット順に近いカテゴリのクラスも意味的に近いことを暗示しています。

ツリーベースではないモデルのカテゴリ値をエンコードする場合は、OneHotEncodingを使用する方がはるかに優れています。これは、その項目が列に指定されたクラスに属しているかどうかによって1または0のいずれかで埋められた各クラスの列を作成します。これは、次のようになります:

Category | is_a | is_b | is_c 
A   | 1 | 0 | 0 
B   | 0 | 1 | 0 

これは、それが大幅にあなたの結果を改善する必要があり、あなたのモデルのためのCからそのままAは、遠くBからのものであることを保証します。