6

csvからトレーニングとテストデータをロードし、scikit / sklearnでランダムフォレストリグレッサを実行してから、テストファイルからの出力を予測しようとしています。

TrainLoanData.csvファイルには5つの列が含まれています。最初の列は出力であり、次の4列は機能です。TestLoanData.csvには、機能の4つの列が含まれています。

コードを実行すると、次のエラーが発生します。

    predicted_probs = ["%f" % x[1] for x in predicted_probs]
IndexError: invalid index to scalar variable.

これは何を意味するのでしょうか?

これが私のコードです:

import numpy, scipy, sklearn, csv_io //csv_io from https://raw.github.com/benhamner/BioResponse/master/Benchmarks/csv_io.py
from sklearn import datasets
from sklearn.ensemble import RandomForestRegressor

def main():
    #read in the training file
    train = csv_io.read_data("TrainLoanData.csv")
    #set the training responses
    target = [x[0] for x in train]
    #set the training features
    train = [x[1:] for x in train]
    #read in the test file
    realtest = csv_io.read_data("TestLoanData.csv")

    # random forest code
    rf = RandomForestRegressor(n_estimators=10, min_samples_split=2, n_jobs=-1)
    # fit the training data
    print('fitting the model')
    rf.fit(train, target)
    # run model against test data
    predicted_probs = rf.predict(realtest)
    print predicted_probs
    predicted_probs = ["%f" % x[1] for x in predicted_probs]
    csv_io.write_delimited_file("random_forest_solution.csv", predicted_probs)

main()
4

3 に答える 3

5

aからの戻り値RandomForestRegressorは、floatの配列です。

In [3]: rf = RandomForestRegressor(n_estimators=10, min_samples_split=2, n_jobs=-1)

In [4]: rf.fit([[1,2,3],[4,5,6]],[-1,1])
Out[4]: 
RandomForestRegressor(bootstrap=True, compute_importances=False,
           criterion='mse', max_depth=None, max_features='auto',
           min_density=0.1, min_samples_leaf=1, min_samples_split=2,
           n_estimators=10, n_jobs=-1, oob_score=False,
           random_state=<mtrand.RandomState object at 0x7fd894d59528>,
           verbose=0)

In [5]: rf.predict([1,2,3])
Out[5]: array([-0.6])

In [6]: rf.predict([[1,2,3],[4,5,6]])
Out[6]: array([-0.6,  0.4])

したがって、のようなフロートにインデックスを付けようとしていますが(-0.6)[1]、これは不可能です。

ちなみに、モデルは確率を返しません。

于 2013-01-09T09:35:39.300 に答える
2

まず、問題を再現してデバッグするためのサンプルデータも用意しておくと常に役立ちます。それらが大きすぎるか秘密である場合、それらの興味深い部分を抽出することができます。

変数の内容がpredicted_probs期待どおりではないようです。それは整数のリスト(または配列)のようであり、これも私が期待するものです。

sklearnでは、X.train()メソッドは常にtrainingdataとそれに対応するクラス(通常は整数または文字列)を取得します。次に、このX.predict()メソッドは検証データのみを取得し、予測結果を返します。つまり、検証データの各セットに対して1つのクラス(整数または文字列)を返します。

トレーニングされた分類器の精度がどれほど優れているかを知りたい場合は、トレーニングと予測だけでなく、クロス検証を実行する必要があります。つまり、トレーニングと検証を繰り返し、毎回、正しい予測の数を確認します。skleanには優れたドキュメントがあります。それぞれのセクションが見つかると思います。そうでない場合は、私に聞いてください。

于 2013-01-09T09:31:18.260 に答える
1

データセットの読み込みには、「csv_io.read_data」ではなくnumpyの「genfromtxt」を使用してみてください。これにより、csv内のデータが自動的にnumpy配列に変換されます。また、 Python ForDataScienceの記事を読むと役に立ちます...

于 2013-01-24T17:04:36.513 に答える