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

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

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

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

Q&A

解決済

3回答

2413閲覧

説明変数が複数のSVR(サポートベクター回帰)の実装

su142ie

総合スコア12

Python

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

0グッド

0クリップ

投稿2018/09/24 03:43

編集2018/09/24 06:49

やりたいこと

  • 説明変数が複数あるSVRの実装

起きている問題

ウェブページを参考にやってみましたが、
計算結果が出てきませんでした。

結果が表示されない原因があれば教えてください。
また、以下についても教えていただければ嬉しいです。

  • パラメータの表示
  • 予測値をグラフに表す

使用したデータセットはUCIのBoston house-prices(米国ボストン市郊外における地域別の住宅価格のデータセット)です。

python

1import numpy as np 2from sklearn.svm import SVR 3from matplotlib import pyplot as plt 4from sklearn.datasets import load_boston 5boston = load_boston() 6import pandas as pd 7pd.DataFrame(boston.data, columns=boston.feature_names) 8 9#簡易的にトレーニングデータとテストデータを分けた 10X = boston.data[:354, :] 11y = boston.target[:354] 12 13svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1) 14svr_lin = SVR(kernel='linear', C=1e3) 15svr_poly = SVR(kernel='poly', C=1e3, degree=3) 16y_rbf = svr_rbf.fit(X, y).predict(X) 17y_lin = svr_lin.fit(X, y).predict(X) 18y_poly = svr_poly.fit(X, y).predict(X) 19 20test_X = boston.data[354:, :] 21test_y = boston.target[354:] 22 23test_rbf = svr_rbf.predict(test_X) 24test_lin = svr_lin.predict(test_X) 25test_poly = svr_poly.predict(test_X) 26 27from sklearn.metrics import mean_squared_error 28from math import sqrt 29 30# RMSEを計算 31rbf_rmse = sqrt(mean_squared_error(test_y, test_rbf)) 32lin_rmse = sqrt(mean_squared_error(test_y, test_lin)) 33poly_rmse = sqrt(mean_squared_error(test_y, test_poly)) 34

参考URL
scikit-learnで多変数の回帰モデル - SVRの比較検証やってみた

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

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

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

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

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

guest

回答3

0

サポートベクターマシンを使う場合、与えられた生データのままだと処理が時間がかかるので、データの標準化や正規化をしてからモデリングするというのが王道です。
データによるので何とも言えませんが、sklearn.preprocessing.StandardScaler()を使って、計算しやすい値に変換してからfit()をしてあげるといいでしょう。

参考コード

python3

1from sklearn import preprocessing 2sc=preprocessing.StandardScaler() 3sc.fit(X) # StandardScalerの学習 4X=sc.transform(X) # 学習結果をもとにXのStandardScalerによる変換 5

投稿2018/09/24 14:44

R.Shigemori

総合スコア3376

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

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

su142ie

2018/09/24 14:55

回答ありがとうございます! 実は、ボストンのデータセットでSVRを行いたいのではなく、 別な正規化してあるデータの回帰を行いたかったのでその方法を探していました。 正規化したデータで行った結果、全ての計算を処理することができました。 R.Shigemoriさんのアドバイスも今後活かせそうです!
guest

0

解決済みですが、簡単な対処法を。

python

1svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1, max_iter=10**5) 2svr_lin = SVR(kernel='linear', C=1e3, max_iter=10**5) 3svr_poly = SVR(kernel='poly', C=1e3, max_iter=10**5)

繰り返しの最大値を10^5に指定して、収束しない場合でも強制的に抜けさせます。(ちなみにlinearカーネルのときに挙動が怪しいようです)。

こんな警告を出してくれます。

ConvergenceWarning: Solver terminated early (max_iter=100000). Consider pre-processing your data with StandardScaler or MinMaxScaler.

投稿2018/09/24 17:59

hayataka2049

総合スコア30933

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

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

su142ie

2018/09/24 18:04

ためになる情報をありがとうございます! 使ってみます!
guest

0

ベストアンサー

追記
計算が終わらない
デバッグするなどして1行づつ実行出来るところまで試してみてください。
(私には何の計算をしてるのかどう改善すればいいかなどは分かりません。あしからず。)

以下Python3.6.6で試しました。
print(5)の行までの計算結果は出ましたが、

Python3

1import numpy as np 2from sklearn.svm import SVR 3from matplotlib import pyplot as plt 4from sklearn.datasets import load_boston 5boston = load_boston() 6import pandas as pd 7pd.DataFrame(boston.data, columns=boston.feature_names) 8print(1) 9 10#簡易的にトレーニングデータとテストデータを分けた 11X = boston.data[:354, :] 12y = boston.target[:354] 13 14print(X) 15print(y) 16print(2) 17 18svr_rbf = SVR(kernel='rbf', C=1e3, gamma=0.1) 19svr_lin = SVR(kernel='linear', C=1e3) 20svr_poly = SVR(kernel='poly', C=1e3, degree=3) 21 22print(svr_rbf) 23print(svr_lin) 24print(svr_poly) 25print(3) 26 27y_rbf = svr_rbf.fit(X, y).predict(X) 28print(y_rbf) 29print(4) 30y_lin = svr_lin.fit(X, y).predict(X) 31print(y_rbf) 32print(5)

これ以降は処理中のまま結果が出ない

Python3

1y_poly = svr_poly.fit(X, y).predict(X) 2print(y_rbf) 3print(6) 4

以下初回回答
参考URLコピペして、最後のprintprint()に変えるだけで出力されました。

Python3.7.0
イメージ説明

投稿2018/09/24 07:15

編集2018/09/24 10:58
opyon

総合スコア1009

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

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

su142ie

2018/09/24 07:26

回答ありがとうございます! 今回、ボストンのデータセットを使ってSVRを実装したいので もしよろしければ問題のあるコードのほうも見ていただければと思います。
opyon

2018/09/24 11:01

質問コードを走らせると処理中のまま戻ってこないでCPUファンがフル回転してPCにダメージが出そうなので申し訳ありませんがこれ以上の回答や調査は出来ません。
su142ie

2018/09/24 14:56

正規化した手持ちの別データで行ったら計算の処理がすべてできました! とても参考になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問