質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2868閲覧

ランダムフォレスト回帰でテストデータを予測できない。

YZYZ

総合スコア20

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/27 13:00

編集2018/09/27 14:26

前提・実現したいこと

ランダムフォレスト回帰を使って機械学習を試みている。
分析コンペなので、訓練データを訓練データとテストデータに分けて学習モデルを作成した。現在は、作ったモデルで、与えられたテストデータの目的変数を予測しようとしている。

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- IndexingError Traceback (most recent call last) <ipython-input-62-686d210ba347> in <module>() 1 # 作ったモデルをテスト用データに適用してみる ----> 2 Pred = forest.predict(test.loc[:, ["OverallQual", "YearBuilt", "YearRemodAdd", "1stFlrSF", "GrLivArea", "FullBath", "GarageCars"]].values.reshape(-1,)) ~\Anaconda3\lib\site-packages\pandas\core\indexing.py in __getitem__(self, key) 1470 except (KeyError, IndexError): 1471 pass -> 1472 return self._getitem_tuple(key) 1473 else: 1474 # we by definition only have the 0th axis ~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_tuple(self, tup) 873 874 # no multi-index, so validate all of the indexers --> 875 self._has_valid_tuple(tup) 876 877 # ugly hack for GH #836 ~\Anaconda3\lib\site-packages\pandas\core\indexing.py in _has_valid_tuple(self, key) 218 for i, k in enumerate(key): 219 if i >= self.obj.ndim: --> 220 raise IndexingError('Too many indexers') 221 try: 222 self._validate_key(k, i) IndexingError: Too many indexers

該当のソースコード

Python

1# X,yにデータを代入 2X = train.loc[:, ["OverallQual", "YearBuilt", "YearRemodAdd", "1stFlrSF", "GrLivArea", "FullBath", "GarageCars"]].values 3y = train["SalePrice"].values 4X_train, X_test, y_train, y_test = train_test_split(X,y, test_size= 0.4, random_state=1) 5 6from sklearn.ensemble import RandomForestRegressor 7 8# ランダムフォレスト回帰のクラスをインスタンス化 9forest = RandomForestRegressor(n_estimators=100, criterion="mse", random_state=1, n_jobs=-1) 10 11forest.fit(X_train, y_train) 12y_train_pred = forest.predict(X_train) 13y_test_pred = forest.predict(X_test) 14 15# 作ったモデルをテスト用データに適用してみる 16Pred = forest.predict(test.loc[:, ["OverallQual", "YearBuilt", "YearRemodAdd", "1stFlrSF", "GrLivArea", "FullBath", "GarageCars"]].values) 17

試したこと

訓練データを学習させる際に、

forest.fit(X_train, y_train.reshape(-1,))

としてみたが改善されず。

補足情報(FW/ツールのバージョンなど)

Pythonもライブラリも最新のはずです。
訓練データのデータフレームは

Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape LandContour Utilities ... PoolArea PoolQC Fence MiscFeature MiscVal MoSold YrSold SaleType SaleCondition SalePrice 0 1 60 RL 65.0 8450 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 2 2008 WD Normal 208500 1 2 20 RL 80.0 9600 Pave NaN Reg Lvl AllPub ... 0 NaN NaN NaN 0 5 2007 WD Normal 181500 2 3 60 RL 68.0 11250 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 9 2008 WD Normal 223500 3 4 70 RL 60.0 9550 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 2 2006 WD Abnorml 140000 4 5 60 RL 84.0 14260 Pave NaN IR1 Lvl AllPub ... 0 NaN NaN NaN 0 12 2008 WD Normal 250000 5 rows × 81 columns

となっていて、訓練データ、テストデータ共に、モデルに使用する説明変数の欠損値は0個の状態になってます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/09/27 13:02

エラーは省略せず、スタックトレース等含めて全体を掲載した方が回答しやすいです
hayataka2049

2018/09/27 13:04

あと、データフレームの構造やX,yのshapeなども書くと良いかと
YZYZ

2018/09/27 14:23

ありがとうございます。ご指摘を参考にしてみます!
guest

回答1

0

ベストアンサー

エラーが出ている箇所は予測すべきデータのindexingの箇所です。

python

1train.loc[:, ["OverallQual", "YearBuilt", "YearRemodAdd", "1stFlrSF", "GrLivArea", "FullBath", "GarageCars"]].values

が成功して

python

1test.loc[:, ["OverallQual", "YearBuilt", "YearRemodAdd", "1stFlrSF", "GrLivArea", "FullBath", "GarageCars"]].values

がダメな合理的な理由ってなんだろう・・・

  • testの型はDataFrameですか?
  • というか、そもそもtrainとtestはどうやって読み込んでいますか?

投稿2018/09/27 14:29

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YZYZ

2018/09/27 14:39

ご回答くださりありがとうございます! おっしゃるとおり、trainデータの読み込みは成功したのにtestデータの読み込みだけエラー吐かれるのが納得いかない感じです。 csvから ``` # trainデータ train = pd.read_csv('train.csv') # testデータ test = pd.read_csv('test.csv') ``` で読み込んでます。
hayataka2049

2018/09/27 14:41 編集

Pred = forest.predict(test.loc[:, ["OverallQual", "YearBuilt", "YearRemodAdd", "1stFlrSF", "GrLivArea", "FullBath", "GarageCars"]].values) の行が実行される直前で、printを入れたり型やshapeを調べたりして、不審なことになっていないか一応確認してみてください
YZYZ

2018/09/27 14:45

ありがとうございます! おかしなことになってました!testデータに一つしか変数が格納されてませんでした。どこかの処理で変数を大量に削除してしまっていたみたいです。間の処理を、1行1行見直してみます。希望の光が見えてきました。
YZYZ

2018/09/27 15:04

hayataka2049 さん 参考となるご意見を下さりありがとうございました!testデータを前処理で欠損値補完する際に代入の仕方を誤っていたためにtestデータに説明変数が不適切に入っていたようでした。 無事、Kaggleに提出することができました。まだまだ駆け出しですが、挫折せずに一歩目を踏み出せたので本当に感謝しています。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問