【Python】Scikitlearnの内LinearRegressionを使った値予測を行う
こんばんは、葛の葉です。機械学習ライブラリであるsklearnを使ってデータの学習と予測…と言いたいところなんだけど、なんだかいいデータがなくて、全く無造作なデータを学習させて予測するという意味のないことやってました。
環境
Anaconda 5.3.0
Python 3.7.0
numpy 1.15.1
pandas 0.23.4
jupyter 1.0.0
scikit-learn 0.19.2
適当なデータを使う。
tekito.csv
data1,data2,data3 22,62,73 22,66,61 76,58,26 35,60,43 35,30,100 61,35,97 50,62,48 87,94,86 95,33,34 35,58,32 79,84,20 82,15,92 50,66,37 62,89,74 53,51,65 74,80,75 89,27,80 100,62,78 97,77,79 88,37,54
data1,data2,data3は共に15から100の数値を適当出力する設定にしているだけなので、なんも意味を持ちません。
重回帰分析を使う
回帰分析のうち、目的変数に対して説明変数が2つ以上のものを重回帰分析といい、説明変数が1つの場合は単回帰分析と言うみたいです。
目的変数とは予測したいデータで今回はdata3
です。
説明変数とは目的変数を予測するために使うデータのことdata1
,data2
です。
data1
とdata2
を使ってdata3
を予測するというのが今回の目的です。
回帰分析については以下のWikipediaも参照。
説明変数のデータ
test.csv
data1,data2 35,77 60,43 45,53 64,65 81,21 90,33 100,46 50,18 30,32 29,60
このtest.csv
のdata1
,data2
を使ってdata3
に相当するデータを出力する。
JupyterNoteBookを使う
以下はJupyterNoteBook上でのコマンドになります。
ライブラリのインポート
import pandas as pd import numpy as np # 要らないかも from sklearn.linear_model import LinearRegression as LR
上記コードをセルに挿入してからShift + Enter
すると次のセルに移ります。
その時に何らかのエラーが出ればそれはライブラリのインポートが失敗していると思います。
from sklearn.linear_model import LinearRegression as LR
これが機械学習のライブラリsklearn
です。
LinearRegression
は線形回帰を意味しているようです。
as LR
としてLinearRegression
をLR
として略称します。
CSVのインポート
pandasでcsvをロードします。
train = pd.read_csv('tekito.csv') test = pd.read_csv('test.csv')
pandas.read_csv('***.csv')
はpandasのライブラリとしてcsvをpandasのDataFrameとして読み込みます。
Shift + Enter
で、次のセルへ。
エラーを吐く場合は事前に説明していたCSVが、同じディレクトリ内にないとか、その辺りだとおもいます。
train.head()
.head()
は読み込んだDataFrame
の最初の5行分を出力します。
data1 data2 data3 0 22 62 73 1 22 66 61 2 76 58 26 3 35 60 43 4 35 30 100
Shift + Enter
で、次のセルへ。
特定のカラムのデータを読み取る
trainX = train[['data1', 'data2']] y = train['data3'] testX = test[['data1','data2']]
train内の2つのカラムを代入しています。
train[['data1', 'data2']]
y
は目的変数としtrain['data3']
を代入しています。
testX
は最終的に予測するための説明変数をもっています。
trainX
とy
を使ってdata1
,data2
とdata3
で線形回帰を行い、最終的にはtestX
内にあるdata1
,data2
を元にtestXのdata3
に当たるデータを出力します。
Shift + Enter
で、次のセルへ。
モデルの作成とモデルへの学習
model = LR() model.fit(trainX, y)
model.fit(trainX, y)
で.fit(説明変数, 目的変数)
となっており、回帰モデルとなっています。
trainX
はdata1
とdata2
をもっているので重回帰モデルとなっています。
Shift + Enter
で、次のセルへ。
学習したデータを出力する
pred = model.predict(testX) pred
以下のデータが学習で出したデータになります。
array([55.80356749, 65.91988259, 62.42089327, 60.75553676, 72.7960059 ,70.4459384 , 67.91714972, 71.41497867, 66.58486472, 59.5950097 ])
さっぱり意味がないデータですけどね。
Shift + Enter
で、次のセルへ。
ついでにCSVとして出力しましょう。
tester = pd.DataFrame() tester[0] = pred tester.to_csv('cho_tekitou.csv', header=None, index=None)
.to_csv
関数にてcho_tekitou.csv
という名前で出力します。
ここまできていて言うのもなんだが
data1
とdata2
は無造作なデータで、当然、法則性なんてないです。なので、最終的なpred
の値はとても意味のないものになるはずです。
またpred
が正確にデータを予言できているかどうか、というのも保証できません。
とりあえず、データを出せてよかったねってレベルで今回は終わりです。