前回、『回帰分析』ともそもそも何かということと、Numpyを使った回帰分析について書きました。
単回帰と重回帰の違いや線形回帰と非線形回帰の違いなど、細かい内容についても言及しています。
実際にCreepyNutsさんのCD価格を予想するために、単回帰分析を実施した結果がこちらです!!
今回は更に詳細な分析を行うために、『scikit-learn』という機械学習に特化したライブラリを使って、予想価格を数値として導き出すところまで実践していきます!!
読んで得する人は??Python scikit-learnで回帰分析をしたい方は必見
今回はPythonのscikit-learnを使って回帰分析を実践します!!
前回も書きましたが,回帰分析は機械学習エンジニアやデータサイエンティストは必ずと言っていほどぶちあたる壁なので、読んで損はないはずです。☟☟☟
- Pythonを使って単回帰分析を行うことで,回帰分析イメージを掴みたい方
- 機械学習、AI系のエンジニア・データサイエンティストを志す方
- Pythonの”scikit-learn”これ『サイキットラーン』と読みます.ギリ知ってた方
Numpyでの単回帰分析【前回の復習】
前回の復習です。Numpyを使って単回帰分析をやってみました。ここでは線形回帰と非線形回帰の近似線を書いてます!!
まずはコードから☟☟☟
[python] i [/python]
結果のグラフがこちら☟☟☟
[word_balloon id=”1″ position=”L” size=”M” balloon=”talk” name_position=”under_avatar” radius=”true” avatar_border=”false” avatar_shadow=”false” balloon_shadow=”true”]線形と非線形の近似線は引けているけど、肝心の数値が出ていないわね。これじゃあまだ正確な予想になっていないわね。[/word_balloon]
[word_balloon id=”2″ position=”R” size=”M” balloon=”talk” name_position=”under_avatar” radius=”true” avatar_border=”false” avatar_shadow=”false” balloon_shadow=”true”]いや…そもそも価格関係なしにレアだからなくなっちゃうかもしれないのに…”(-“”-)”[/word_balloon]
[word_balloon id=”1″ position=”L” size=”M” balloon=”talk” name_position=”under_avatar” radius=”true” avatar_border=”false” avatar_shadow=”false” balloon_shadow=”true”]黙って分析して数値を出しなさい!![/word_balloon]
scikit-learn 線形単回帰分析でざっくりと価格推移を予測
それではCreepyNutsさんのCD価格を予測し,数値として出力しいきます!
今回はskit-learnを使用し,線形単回帰分析を行っていきます!!
[word_balloon id=”1″ position=”R” size=”M” balloon=”talk” name_position=”under_avatar” radius=”true” avatar_border=”false” avatar_shadow=”false” balloon_shadow=”true”]線形だから一次式,単回帰だから1次元ね!![/word_balloon]
コードはこちらのようになります。☟☟☟
mport pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
#変数
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
#y軸csvデータ読み込み
data = pd.read_csv('cp.csv')
y = np.array(data)#配列化
y = y.reshape(-1,)#次元変更(2から1次元)
#日付のx軸を作成
x = pd.date_range('2019-08-30 00:00:00', periods=16, freq='d')
#線形回帰次数1
x1=np.arange(16)
ab = np.polyfit(x1,y,1)
y1 = np.poly1d(ab)(x1)
#線形回帰次数5
ab = np.polyfit(x1,y,5)
y2 = np.poly1d(ab)(x1)
#グラフ作成
ax.plot(x,y,'b')
ax.plot(x,y1,'k')
ax.plot(x,y2,'--k')
#グラフフォーマットの指定
days = mdates.DayLocator()
daysFmt = mdates.DateFormatter('%m-%d')
ax.xaxis.set_major_locator(days)
ax.xaxis.set_major_formatter(daysFmt)
plt.xlabel("date")#横軸ラベル
plt.ylabel("plice")#縦軸ラベル
plt.grid(True)#目盛表示
plt.tight_layout()#全てのプロットをボックス内に
plt.show()
重要なコードについて解析します.
- from sklearn import linear_model
⇒skit-learnの線形解析用のモジュールをインポートします. - clf = linear_model.LinearRegression()
⇒clfという変数に回帰式をあてはめ分析します.xが経過日数のみの1次元なので,線形単回帰分析となります. - clf.fit(x2,y) # 予測モデルを作成
⇒分析した結果をから算出される近似線を生成します.
ここまでで算出した値を用いればこんなグラフが書けます.
青が実際の値、黒が線形の近似式です!!これはNumpyで計算したのと同じ結果ですね!!
それでは予想価格を算出する上での最重要コード説明します!!
- print(“回帰係数= “, clf.coef_)
- print(“切片= “, clf.intercept_)
- print(“決定係数= “, clf.score(x2,y))
それぞれ,ラベルをつけてありますが,”回帰係数” ”切片” ” 決定係数”を表示させます.
結果はこのようになります!!
- 回帰係数= [65.37941176]
- 切片= 311.9044117647058
- 決定係数= 0.06085489711467662
まとめ
- Pythonのライブラリであるskit-learnを使うことで回帰分析が簡単にできる.
- 線形単回帰分析の結果から、関数にあてはめることで簡単に予測ができる。
- R指定さん応援してます!!(CD欲しい)
より正確な分析、予測を行うために非線形単回帰分析を行った結果はこちら!!
座右の銘は明日は明日の風が吹く。虎ぱぱでした♪