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

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

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

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

Q&A

解決済

2回答

13943閲覧

python3 Anacondaについて 機械学習でエラー?が起こります

kakini

総合スコア40

Python 3.x

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

0グッド

0クリップ

投稿2019/04/17 06:37

本で現在機械学習に関する項目を勉強しているんですが
その中でAnacondaを使って64ピクセルの正方形を0~16段階の濃さで現した白黒の画像を機械に学習させた場合
その正解率がいくらかというのをやっています
そして下記のコードを実行した際エラー?なのかどうか分かりませんが
エラーと思わせるような文章が出てきました

python

1from sklearn.model_selection import train_test_split as split 2x,x_test,y,y_test=split(digits.data, digits.target) 3 4from sklearn import svm 5clf=svm.SVC() 6clf.fit(x,y) 7 8pred=clf.predict(x_test) 9result=list(pred==y_test).count(True)/len(y_test) 10print("正解率="+str(result))

エラーみたいな文章はこちらです
C:\Users\user\Anaconda3\lib\site-packages\sklearn\svm\base.py:196: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.
"avoid this warning.", FutureWarning)

ちなみに本ではこれを実行した際正解率は0.406666667と表示されています
ただ学習データとテストデータはランダムにシャッフルされているので毎回違う数字が出てくるらしいですが
本の中では
「毎回、微妙に正解率は異なりますが、この値(0.406666667)の前後となるでしょう」
この様に記述されています
自分が上のコードを何度か実行した際出てきた正解率の範囲は
0.3~0.61です
これは誤差の範囲内なのでしょうか?
自分ではこの手の文章にしてはちょっと誤差が大きいのではないかと思っています
↑で書いたエラーみたいな文章が何か関係しているんでしょうか?

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

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

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

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

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

guest

回答2

0

Warningはエラーではありません。日本語に訳すと警告で、「そのコード動くけどちょっとアレやで」ということを教えてくれています。

この場合、sklearnの将来のバージョンで仕様が変わるよ・・・ということを教えてくれています(メッセージを読んでいただければいいですし、英語が読めなければgoogle翻訳にでも突っ込んでください)。警告を消すには書いてある通りですが「Set gamma explicitly to 'auto' or 'scale' to avoid this warning.」してください。

python

1# ↓もともとこちらがデフォルトでした。 2clf=svm.SVC(gamma="auto") 3# 現在のデフォルト値は"auto_deprecated"というもので、上の警告を出した上で"auto"にするというものです。 4 5# ↓将来はこちらがデフォルト値になります。こちらの方が性能とかが良くなるケースが多いはずです 6clf=svm.SVC(gamma="scale")

「毎回、微妙に正解率は異なりますが、この値(0.406666667)の前後となるでしょう」

この様に記述されています
自分が上のコードを何度か実行した際出てきた正解率の範囲は
0.3~0.61です
これは誤差の範囲内なのでしょうか?

そんなものだと思います。手元で100回回してみましたが、

平均:0.42577777777777776
標準偏差0.0722350847563656

くらいでした。

偏りが大きいのはtrain_test_splitで分割する際に、ラベルを考慮していないからです(ほぼ確実に特定のラベルに偏った分割になる)。

python

1 x,x_test,y,y_test=split(digits.data, digits.target, stratify=digits.target)

とでもしてあげれば、だいぶ標準偏差が小さくなり、正解率そのものも改善します。その本ではそこまで説明しなかったのだと思いますが、普通はこちらの方が望ましい使い方です。

https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html

投稿2019/04/17 06:51

hayataka2049

総合スコア30933

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

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

kakini

2019/04/22 07:06

返答が遅れて申し訳ありません、回答ありがとうございました。 scaleで試した所正解率が0.98を割る事なくかなり高い数字が出てくれました
guest

0

ベストアンサー

google翻訳
FutureWarning:バージョン0.22ではガンマのデフォルト値が 'auto'から 'scale'に変更され、スケーリングされていない機能をよりよく説明できるようになります。この警告を回避するには、gammaを明示的に 'auto'または 'scale'に設定してください

投稿2019/04/17 06:51

y_waiwai

総合スコア87719

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

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

kakini

2019/04/22 07:05

回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問