AI・機械学習

scikit-learnで線形回帰分析 【Python 回帰分析②】

助手ミルク
助手ミルク
前回はPythonのNumpyを使って,回帰分析に必要な近似曲線を作りましたね!!

虎ぱぱ
虎ぱぱ
そうですね!でも近似線を書いただけじゃ、CreepyNutsさんの正確なCD価格はわからなかった…これじゃあ買ってもらないよね…。

助手ミルク
助手ミルク
うん。当然そうね。さあ今日も分析しなさい!!働きなさい!馬車馬のように。

虎ぱぱ
虎ぱぱ
一応虎でやらせてもらってるんですけど。

前回、『回帰分析』ともそもそも何かということと、Numpyを使った回帰分析について書きました。

Numpyを使って線形回帰・非線形回帰 非エンジニア向けにcsv読みこみから【Python回帰分析①】Pythonは機械学習やAIプログラミングに特化したプログラミング言語です。今回はNumpyというモジュールを使って、回帰分析をしてみました。回帰分析とは何かにも触れ、コードつきで詳しく解説しています。...

単回帰と重回帰の違いや線形回帰と非線形回帰の違いなど、細かい内容についても言及しています。

実際にCreepyNutsさんのCD価格を予想するために、単回帰分析を実施した結果がこちらです!!

今回は更に詳細な分析を行うために、『scikit-learn』という機械学習に特化したライブラリを使って、予想価格を数値として導き出すところまで実践していきます!!

読んで得する人は??Python scikit-learnで回帰分析をしたい方は必見

 

 

今回はPythonのscikit-learnを使って回帰分析を実践します!!

 

前回も書きましたが,回帰分析は機械学習エンジニアやデータサイエンティスト必ずと言っていほどぶちあたる壁なので、読んで損はないはずです。☟☟☟

 

 

  • Pythonを使って単回帰分析を行うことで,回帰分析イメージを掴みたい方



  • 機械学習、AI系のエンジニア・データサイエンティストを志す方



  • Pythonの”scikit-learn”これ『サイキットラーン』と読みます.ギリ知ってた方 

 

助手ミルク
助手ミルク
scikit-learnっていう名前がかっこいい!!いかにも機械学習って感じ。

虎ぱぱ
虎ぱぱ
科学系の学習??みたいなニュアンスだよね!!私にぴったり!!

助手ミルク
助手ミルク
…まずは鏡を見て頭の中で画像処理を実行しなさい。

 

 

Numpyでの単回帰分析【前回の復習】

助手ミルク
助手ミルク
]まずはイメージを掴むために前回の復習からですね!!

虎ぱぱ
虎ぱぱ
Numpyを使った分析結果ですね!!ほらCreepyNutsさんのCD…早く買わないと価格が急騰しちゃうよ!?

 

 

前回の復習です。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
 
 
 
 
 
 
 
 
今回の場合、線形回帰分析なので、近似線は直線であり1次式”y=ax+b”で予測ができます!!
 
 
 
 
 
 
回帰係数は a にあたり、切片は b にあたります!!
 
 
 
 
 
 
 
今回は ”30日経過時”x の ”価格”y を予想してみます。従って算出方法は
 
 
 
 
 
 
 
y = 65.37941176 × 30 + 311.9044117647058
 
 
 
 
 
 
 
となり、計算結果は少数点以下を切り捨て 2273円でした!!
 
 
 
 
助手ミルク
助手ミルク
なるほどねえ~やるじゃない!!…1つ質問なんですが、決定係数ってなんですか??
 
虎ぱぱ
虎ぱぱ
ぎくっ!!決定係数はですね…予測の精度を表していまして…0~1の間で推移します。1に近いほど正確な予測という意味を持っています…
 
助手ミルク
助手ミルク
だってサンプル点数が少ないんだもん…当然精度は落ちるよ…こういう場合は非線形回帰分析をしなきゃ…っっ!しまった!!
 

助手ミルク
助手ミルク
ふふふ。虎だけに尻尾を出したわね。しっかり掴んだわよ。笑非線形回帰分析が終わるまでCDはお預けね!!

虎ぱぱ
虎ぱぱ
ううう…鬼畜め…。窮鼠猫を噛むって言葉を教えてやるからな~次回のブログ楽しみにしとけよ。

助手ミルク
助手ミルク
いやっネズミって。虎だろお前。ネコ科だろ。分析してはよブログ書け。

 

 

まとめ

 

  • Pythonのライブラリであるskit-learnを使うことで回帰分析が簡単にできる.

     

  • 線形単回帰分析の結果から、関数にあてはめることで簡単に予測ができる。

     

  • R指定さん応援してます!!(CD欲しい)

     

より正確な分析、予測を行うために非線形単回帰分析を行った結果はこちら!!

Scikit-learnで非線形回帰分析【Python 回帰分析③】CreepyNutsのCDが欲しい!嫁さんの許可を取るためにAIエンジニアがPythonを駆使してCD価格を非線形回帰分析で予測!!Pythonのコードを公開して、非線形回帰分析について詳しく説明してます!!...

 

座右の銘は明日は明日の風が吹く。虎ぱぱでした♪

PythonでAIを作ってみたい⇒誰でも勉強すればできる?
虎ジュニア
虎ジュニア
ぱぱー僕もAI作ってみたいよ~機械学習教えてよ~
虎ぱぱ
虎ぱぱ
ジュニアにはまだ早いよ。大人になったらね~
助手ミルク
助手ミルク
ちょっ…いつも挑戦がどうとか言っときながら…子供の夢を奪う気!?AIは誰でも作れるんじゃなかったの!?
虎ぱぱ
虎ぱぱ
そりゃ…いつも言ってる通り、正しく学べば誰でも作れますよ!!(そうは言ってもジュニアは3歳だぞ。)