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

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

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

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

Q&A

解決済

2回答

6299閲覧

[ValueError]Series の真理値が曖昧と言われる

Yukiya025

総合スコア86

Python 3.x

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

0グッド

0クリップ

投稿2018/11/07 10:12

編集2018/11/07 12:14

こんばんは!技術評論社の「データサイエンス養成読本」の第3章 Pythonによる機械学習をJupyter Notebookに写経しているのですが、単回帰分析でValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().が出ます。

「指摘された行の関係性をはっきりさせればよい」との情報は得られたのですが、

px = np.arange(X.min(), X.max(), .01)[:, np.newaxis]
このコードをこれ以上どうやってはっきりさせればよいのでしょうか。
np.arangeで等差数列を生成して、np.newaxisでこの数列を縦方向にするという意味のコードであり、過不足ないように思うのですがorz

該当コード

python

1# リスト17 単回帰分析 2LinerRegr = linear_model.LinearRegression() 3X = setosa[["SepalLength"]] 4Y = setosa[["SepalWidth"]] 5LinerRegr.fit(X, Y) 6plt.scatter(X, Y, color="black") 7px = np.arange(X.min(), X.max(), .01)[:, np.newaxis] 8# px = np.arange(X.min(), X.max(), .01)[:, np.newaxis] 9py = LinerRegr.predict(px) 10plt.plot(px, py, color = "blue", linewidth=3) 11plt.xlabel("SepalLength") 12plt.ylabel("SepalWidth") 13plt.show() 14 15print(LinerRegr.coef_)# 回帰係数 16print(LinerRegr.intercept_) # 切片

エラー文

ValueError Traceback (most recent call last) <ipython-input-16-dcbb1a892a19> in <module>() 5 LinerRegr.fit(X, Y) 6 plt.scatter(X, Y, color="black") ----> 7 px = np.arange(X.min(), X.max(), .01)[:, np.newaxis] 8 # px = np.arange(X.min(), X.max(), .01)[:, np.newaxis] 9 py = LinerRegr.predict(px) ~/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py in __nonzero__(self) 1574 raise ValueError("The truth value of a {0} is ambiguous. " 1575 "Use a.empty, a.bool(), a.item(), a.any() or a.all()." -> 1576 .format(self.__class__.__name__)) 1577 1578 __bool__ = __nonzero__ ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

できましたー(≧▽≦)

can110 様、ありがとうございます(≧▽≦) できましたー!

px = np.arange(X.min()[0], X.max()[0], 0.01)[:,np.newaxis]

「最小/大値の0番目の要素」で指定するのですね(゚д゚)!

この本は改訂版が出ているようなので、それを買いなおすか

持っているのはその改定2版なんですよ。。。orz 2018年5月11日発行のものですf^^;
DScover
Okuduke

完成コード

python

1# リスト17 単回帰分析 2LinerRegr = linear_model.LinearRegression() 3X = setosa[["SepalLength"]] 4Y = setosa[["SepalWidth"]] 5LinerRegr.fit(X, Y) 6plt.scatter(X, Y, color="black") 7px = np.arange(X.min()[0], X.max()[0], 0.01)[:,np.newaxis] 8 9py = LinerRegr.predict(px) 10plt.plot(px, py, color = "blue", linewidth=3) 11plt.xlabel("SepalLength") 12plt.ylabel("SepalWidth") 13plt.show() 14 15print(LinerRegr.coef_)# 回帰係数 16print(LinerRegr.intercept_) # 切片

Result

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

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

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

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

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

can110

2018/11/07 12:17

あ、改訂版ですね。ちなみに第二版発行は2016/09/25です。なのでちょい古いですね。
guest

回答2

0

ベストアンサー

元ソースはデータサイエンティスト養成読本vol.1(Python 機械学習)でしょうか?

X.min()X.max()がSeries型だったので
px = np.arange(X.min[0], X.max[0], 0.01)[:,np.newaxis]
px = np.arange(X.min()[0], X.max()[0], 0.01)[:,np.newaxis]
と修正することで結果表示されるようになりました。

なお、他にも元ソースが古いため(2013年?)FutureWarningなどの警告がいくつか発生しました。
この本は改訂版が出ているようなので、それを買いなおすか、コードは参考程度にとどめて自力で書くか修正しないとダメだと思います。
イメージ説明

投稿2018/11/07 11:50

can110

総合スコア38266

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

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

Yukiya025

2018/11/07 12:17

can110さま、ありがとうございます(≧▽≦) できましたー<3 しかしこれでも最新版買っているんですよorz コードが古いのかどうかは。。。見分けつかないですorz
can110

2018/11/07 12:19

あ、改訂版ですね。 ちなみに第二版発行は2016/09/25です。なのでちょい古いです。 解決して何よりです。
guest

0

X = setosa[["SepalLength"]]

X = setosa["SepalLength"]
にしてみてはいかがでしょう。


python

1import numpy as np 2import pandas as pd 3n = 10 4b = pd.DataFrame(np.random.randint(4, size=(n, 2))) 5b.columns = ['a','b'] 6b.index = np.array([str(i) for i in b.index]) 7print(b) 8 9c = b[['a']] 10d = b[['b']] 11a = np.arange(c.min()[0], d.max()[0], 0.1)[:, np.newaxis] 12print(a) 13 14c = b['a'] 15d = b['b'] 16a = np.arange(c.min(), c.max(), 0.1)[:, np.newaxis] 17print(a)

投稿2018/11/07 12:13

編集2018/11/07 13:05
mkgrei

総合スコア8560

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

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

Yukiya025

2018/11/07 12:24

mkgrei様、回答ありがとうございます(≧▽≦) > X = setosa["SepalLength"] これやったら「2次元期待してたのに渡されたのは1次元だった」というエラーが出ましたf^^; 1次元配列だったらよかったのか。。。(・_・)?
mkgrei

2018/11/07 13:04

リストを渡すとDataFrameになって、.min()したあとに[0]が必要になるようになります。 確かにエラーではSeriesになっているので、違和感がありました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問