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

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

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

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

Q&A

解決済

2回答

2923閲覧

python エラー

simasimaa

総合スコア41

Python 3.x

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

0グッド

1クリップ

投稿2017/08/09 12:17

python

1 2weights, params = [], [] 3 4for c in np.arange(-5, 5): 5 lr = LogisticRegression(C=10**c, random_state=0) 6 lr.fit(X_train_std, y_train) 7 weights.append(lr.coef_[1]) 8 params.append(10**c) 9 10weights = np.array(weights) 11plt.plot(params, weights[:, 0], 12 label='petal length') 13plt.plot(params, weights[:, 1], linestyle='--', 14 label='petal width') 15plt.ylabel('weight coefficient') 16plt.xlabel('C') 17plt.legend(loc='upper left') 18plt.xscale('log') 19# plt.savefig('./figures/regression_path.png', dpi=300) 20plt.show() 21コード

Traceback (most recent call last):

File "<ipython-input-43-8167fc659482>", line 4, in <module>
lr = LogisticRegression(C=10**c, random_state=0)

ValueError: Integers to negative integer powers are not allowed.

https://github.com/rasbt/python-machine-learning-book/blob/870838e4b95ab84e5777e2516677abe7f4969a50/code/ch03/ch03.ipynbのコードで実行できないところがあります。どうしたら実行できるようになりますか?
環境はanaconda 4.4.0を使っています
このCh3ではほかにも実行できないところや、マーカーのoがつかなかったりします。パソコン側に問題があるのでしょうか

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

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

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

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

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

guest

回答2

0

まずはエラーをしっかり読みましょう。

ValueError: Integers to negative integer powers are not allowed.
(負の整数による整数のべき乗は許されない)

これはnumpy固有の仕様です。
例えば、次のコードは想定通り動きます。

Python

1for num in range(-5, 5): 2 print(10**num)

対して、次のコードは動きません。

Python

1for num in np.arange(-5, 5): 2 print(10**num) 3 4""" ValueError: Integers to negative integer powers are not allowed. 5"""

逆に言うと、整数でなければnumpyでも期待通りの動作を見せます。

Python

1for num in np.arange(-5, 5): 2 print(10.**num)

numpyの整数型の癖の強さについては、Githubでも話題になっていました。


当方のネット環境の調子が悪く、質問者様の実行しているコードを見ることが出来ていません。
しかし、少なくともこのエラーに関しては、パソコンの設定の問題ではないと思います。

投稿2017/08/09 12:53

LouiS0616

総合スコア35658

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

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

0

ベストアンサー

ほぼ素のAnaconda環境(OS=Win10, python=3.5.x)にて
提示されたURLからはダウンロードできなかったためChapter 3 - A Tour of Machine Learning Classifiers Using Scikit-Learnから落として実行してみました。
Image(filename='./images/03_03.png', width=500)あたりはファイルがないので仕方がないとしてimport pydotplusあたりも実行できませんでした。
pydotplusは追加でインストール必要なモジュールなのかもしれません。

ただ、以下の最低限のコードは実行できました。
元コードでは 「lr = LogisticRegression(C=**10****c, random_state=0)」ですが
以下コードでは「lr = LogisticRegression(C=**10.****c, random_state=0)」となっています。
原因としてはLouiS0616さんの指摘通りと思います。

Python

1from sklearn import __version__ as sklearn_version 2print(sklearn_version) 3 4from sklearn import datasets 5iris = datasets.load_iris() 6X = iris.data[:, [2, 3]] 7y = iris.target 8 9from sklearn.model_selection import train_test_split 10X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=0) 11 12from sklearn.preprocessing import StandardScaler 13sc = StandardScaler() 14sc.fit(X_train) 15X_train_std = sc.transform(X_train) 16X_test_std = sc.transform(X_test) 17 18import numpy as np 19from sklearn.linear_model import LogisticRegression 20weights, params = [], [] 21for c in np.arange(-5., 5.): 22 lr = LogisticRegression(C=10.**c, random_state=0) 23 lr.fit(X_train_std, y_train) 24 weights.append(lr.coef_[1]) 25 params.append(10**c) 26 27import matplotlib.pyplot as plt 28 29weights = np.array(weights) 30plt.plot(params, weights[:, 0], 31 label='petal length') 32plt.plot(params, weights[:, 1], linestyle='--', 33 label='petal width') 34plt.ylabel('weight coefficient') 35plt.xlabel('C') 36plt.legend(loc='upper left') 37plt.xscale('log') 38plt.show()

イメージ説明

投稿2017/08/09 13:03

編集2017/08/09 13:12
can110

総合スコア38233

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

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

simasimaa

2017/08/09 13:11

weights, params = [], [] for c in np.arange(-5, 5): lr = LogisticRegression(C=10**c, random_state=0) lr.fit(X_train_std, y_train) weights.append(lr.coef_[1]) params.append(10**c) weights = np.array(weights) plt.plot(params, weights[:, 0], label='petal length') plt.plot(params, weights[:, 1], linestyle='--', label='petal width') plt.ylabel('weight coefficient') plt.xlabel('C') plt.legend(loc='upper left') plt.xscale('log') # plt.savefig('./figures/regression_path.png', dpi=300) plt.show() は実行できましたか?
can110

2017/08/09 13:13

回答を修正しました。確認ください。
simasimaa

2017/08/09 13:20

ありがとうございます
can110

2017/08/09 13:25

解決したのであればよかったです。 BAは真の原因を指摘されたLouiS0616さんのほうがふさわしいかと。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問