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

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

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

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python

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

Q&A

解決済

1回答

1072閲覧

Sckit Learnを用いた回帰分析。特徴量の最適な組み合わせを選択する方法

JMS

総合スコア7

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Python

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

0グッド

0クリップ

投稿2020/07/01 06:15

もしお分かりになられる方がいらっしゃいましたら教えてください。
いま以下のようなコードを用いてElasticNet回帰を行っています。
ここでいま特徴量が23個あります。全てが「関係あるかもしれない?」と思われるものです。
ここで特徴量は重要なものからそうでないものに分け、その中で重要なものをいくつピックアップしたモデルにすると
当てはまりが良いか?というのを自動でできる方法を考えています。

また、本モデルでは従属変数が7個ありまして、それぞれに対する回帰をしていますので、
1.まずはそれぞれの変数yのそれぞれについて最も最適な組み合わせを戻り値として表示
2.上記の中でも最も平均二乗誤差が小さいものをベストモデルとして表示

という処理をしたいと思っています。
中々難しい処理かもしれませんが、こういう処理をできる方いらっしゃいませんでしょうか?
もしyが1つなら、何かしらこれを解決するパッケージがあるのでは?と考え少し検索したのですが、見つからずでした。

Python

1#ElasticNet回帰を。 2%matplotlib inline 3import matplotlib.pyplot as plt 4import numpy as np 5import pandas as pd 6from sklearn.linear_model import LinearRegression 7from sklearn.preprocessing import StandardScaler 8from sklearn.model_selection import train_test_split 9from sklearn.metrics import mean_squared_error 10from sklearn.preprocessing import PolynomialFeatures 11from sklearn.linear_model import Ridge 12from sklearn.linear_model import Lasso 13from sklearn.linear_model import ElasticNet 14from sklearn.linear_model import SGDRegressor 15 16data=pd.read_excel('元データ.xlsx') 17data=data.drop([0,1]).reset_index(drop=True) 18data['date']=pd.to_datetime(data['date'],format='%Y年%m月') 19data['POSIX']=data['date'].astype('int64').values//10**9 20data['year']=data['date'].dt.year 21data['month']=data['date'].dt.month 22 23#【注意】このコードでは従属変数を7個用意してそれぞれに対する回帰を行い平均二乗誤差を計算しています。 24#また、以下では一部行列の加工をしていますが、元データを整形しているだけです。特徴量は以下のとおり23個あります。 25 26x=data.iloc[0:38:1,[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,32]] 27y0=data.iloc[:38,[23]] #0-43 28y1=data.iloc[:38,[24]]#0-42 29y2=data.iloc[:38,[25]]#0-41 30y3=data.iloc[:38,[26]]#0-40 31y4=data.iloc[:38,[27]]#0-39 32y5=data.iloc[:38,[28]]#0-38 33y6=data.iloc[:38,[29]]#0-37 34 35for y in [y0, y1, y2, y3, y4, y5, y6]: 36 37 x_pos=data['POSIX'].values 38 N=len(x) 39 N_train=round(len(x)*0.8) 40 N_test=N-N_train 41 42 x_pos_train,x_pos_test=x_pos[:N_train],x_pos[N_train:] 43 x_train,y_train=x[:N_train],y[:N_train] 44 x_test,y_test=x[N_train:],y[N_train:] 45 46 POLY=PolynomialFeatures(degree=2,include_bias=False) 47 x_train_pol=POLY.fit_transform(x_train) 48 x_test_pol=POLY.transform(x_test) 49 50 sc=StandardScaler()#特徴料の標準化を行う 51 x_train_std=sc.fit_transform(x_train_pol) 52 x_test_std=sc.transform(x_test_pol) 53 54 model4=ElasticNet(alpha=0.1,l1_ratio=0.6) 55 model4.fit(x_train_std,y_train) 56 y_train_pred4=model4.predict(x_train_std) 57 y_test_pred4=model4.predict(x_test_std) 58 59 print(mean_squared_error(y_train,y_train_pred4)) 60 print(mean_squared_error(y_test,y_test_pred4)) 61

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

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

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

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

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

guest

回答1

0

ベストアンサー

ご質問の趣旨が分からず「追記・修正依頼」の方に書きましたが、もし詳しく学ばれたいとのことであれば

「特徴量エンジニアリング」「特徴量抽出」などでググると多数記事があります。
また下記の書籍も参考となると思います。

機械学習のための特徴量エンジニアリング

Kaggleで勝つデータ分析の技術

投稿2020/07/01 08:04

aokikenichi

総合スコア2218

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問