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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

5492閲覧

IndexError: too many indices for array: array is 1-dimensional, but 2 were indexedが解決できない

otaka

総合スコア22

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/11/25 07:57

編集2020/11/25 07:58

機械学習の”ランダムフォレスト法による回帰”をしている.
参考書”機械学習しませんか”を見ている.
エラーが解決しないので教えて欲しい.

$ python3 ml145.py Traceback (most recent call last): File "ml145.py", line 19, in <module> train_target = train_target[:,0] IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
# -*- coding: utf-8 -*- from sklearn import datasets from sklearn import model_selection from sklearn import ensemble #アイリスデータをセット iris = datasets.load_iris() #最初の3データを説明変数に data = iris.data[:,0:3] #最後の1データを目的変数に target = iris.data[:,3:4] #データを取り分け train_data, test_data, train_target, test_target = model_selection.train_test_split(iris.data, iris.target, test_size=0.3, random_state=1) #配列の次元数を変更 train_target = train_target[:,0]#ここがおかしいようだ. test_target = test_target[:,0] #モデルを学習 clf = ensemble.RandomForestRegressor(n_estimators=100) clf.fit(train_data, train_target) #モデルの検証 score = clf.score(test_data, test_target) print('score=' + str(score)) #予測 predicted = clf.predict([[4.0, 2.0, 3.0]]) print('predict=' + str(predicted))

使用するデータ(iris)の中身は以下の画像のようなもので,今回は0〜2列を説明変数に,3列目を目的変数としてやる

イメージ説明

train_target = train_target[:,0]

この文の意味もいまいちわかっていない.
","の左側が行を,右側が列の範囲を指定していることはわかった.
だからこの文ではtrain_targetの0列目のすべての中身を代入しているのだろうけど,注釈には”配列の次元数を変更”とある.おそらく{[a],[b],[c],...} → {[a,b,c,...]}みたいなことをしているのではないかと思うのだか.

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

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

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

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

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

meg_

2020/11/25 08:56

train_targetのshapeはどうなっていますか?
otaka

2020/11/25 13:00

エラーが発生した文とその下の文をすべてコメントアウトし以下の文を追加しました. print('train_target=' + str(train_target.shape)) 結果 $ python3 ml145.py train_target=(105,) となりました.
otaka

2020/11/25 13:03

ご返信ありがとうございます.
meg_

2020/11/25 13:20

エラーメッセージの通りtrain_targetは1次元配列のようですね。ですので、train_target[:,0]のような操作は不可ですね。書籍の誤植か読み間違いはありませんか?
otaka

2020/11/25 14:28

#データの取り分け train_data, test_data, train_target, test_target = model_selection.train_test_split(iris.data, iris.target, test_size=0.3, random_state=1) これを #データの取り分け train_data, test_data, train_target, test_target = model_selection.train_test_split(data, target, test_size=0.3, random_state=1) こうしたら通りました. 結果は書籍とだいたい同じになりました. この場合のtrain_targetは(105, 1)で二次元配列でした. 書籍のコードと違うのですがこれが正しいのでは?と思っています. 書籍の読者サポートをみましたが正誤表は見つけられませんでした. 読者サポート>http://www.socym.co.jp/support/s-1163
guest

回答1

0

自己解決

”質問への追記・修正の依頼”にて
正しいかどうかは結局わからないままであるがここで打ち切ることにする.
meg_さん感謝.

投稿2020/12/04 07:15

otaka

総合スコア22

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問