前回、Scikit-learnを使った線形回帰分析について書きました。
CreepyNutsさんのレアなCDが欲しくて嫁に交渉するために、落札価格の推移を予測しました。
実線形回帰分析を実施した結果がこちらです!!
回帰分析の結果から、30日経過後の価格は2273円という結果を導きだすことができました!しかしながら…決定係数が0.0608…
今回は更に詳細な分析を行うために、『Numpy』と『scikit-learn』を使って、分析にトライします!!
読んで得する人は??回帰分析,特に決定係数の算出が気になるなら必見
今回はPythonのNumpyとscikit-learnを使って非線形単回帰分析を実践します!!
前回も書きましたが,回帰分析は機械学習エンジニアやデータサイエンティストは必ずと言っていほどぶちあたる壁なので、読んで損はないはずです。☟☟☟
- Pythonで非線形回帰分析がしたい人,決定係数の算出方法が知りたい人
- 機械学習、AI系のエンジニア・データサイエンティストを志す方
- Pythonの”scikit-learn”これ『サイキットラーン』と読みます.ギリ知ってた方
NumpyとScikit-learnを使った線形回帰分析【前回の復習】
前回の復習です。NumpyとScikitLearnを使って単回帰分析をやってみました。ここでは線形回帰と非線形回帰の近似線を書いてます!!
コードはこちら☟☟☟
import 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')
x1=np.arange(16) x2 = [[x1] for x1 in x1]
#線形単回帰
from sklearn import linear_model
clf = linear_model.LinearRegression() clf.fit(x2,y)
# 予測モデルを作成
print("回帰係数= ", clf.coef_)
print("切片= ", clf.intercept_)
print("決定係数= ", clf.score(x2,y))
#グラフ作成
ax.plot(x2,y,'b')
ax.plot(x2, clf.predict(x2),'k')
#グラフフォーマットの指定
plt.xlabel("Days elapsed")#横軸ラベル
plt.ylabel("plice")#縦軸ラベル
plt.grid(True)#目盛表示
plt.tight_layout()#全てのプロットをボックス内に
plt.show()
scikit-learn 非線形単回帰分析 価格の推移を予測してみた
まずは近似曲線を生成 非線形回帰は次数が重要
それではCreepyNutsさんのCD価格を詳細に分析するため,非線形単回帰分析を行っていきます!
今回はNumpyで近似曲線を描きskit-learnで算出を行う形で分析します!!
コードはこちらのようになります。☟☟☟
import 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')
#非線形回帰次数
x1=np.arange(16)
fit = np.polyfit(x1,y,5)
y2 = np.poly1d(fit)(x1)
#決定係数
from sklearn.metrics import r2_score
print(r2_score(y,y2))
#予測
x_30 = np.poly1d(fit)(30)
print(x_30)
#グラフ作成
ax.plot(x,y,'bo')
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("price")#縦軸ラベル
plt.grid(True)#目盛表示
plt.tight_layout()#全てのプロットをボックス内に
plt.show()
まず,Numpyでの近似曲線描画について解説します.
- x1=np.arange(16)
⇒x1という変数に0~15までの配列を入れ込みます。今回のプログラムの場合は経過日数です。 - fit = np.polyfit(x1,y,5)
⇒np.polyfit(x,y,n) は n 次の式で 2 変数(xとy)の最小二乗を行います。 - y2 = np.poly1d(fit)(x1)
⇒ 近似式(fit)に(x1)を代入し、y1の値を生成を生成します.
つまり、x1を横軸にy1を縦軸に置くことで近似曲線が書けます!!
黒線が近似曲線です!!今回は2次式の曲線です!
次数の違いを比較していきますしょう!!
・2次
[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]
決定係数が超重要!!Scikit-Learnでのr2_scoreで解決!!
今回の分析条件を1度整理します!!
- 30日経過時のCreepyNutsのCD価格を予測する。
- 非線形単回帰を用いて予測する!!妥当な次数を判断する必要がある!
- 前提はCDが売れ残っていること。つまり価格が0を割る条件は除外する。
- 決定係数の値がより大きいものを信頼する。
30日後の予想価格と決定係数を算出するコード重要なりそうですね!!
- x_30 = np.poly1d(fit)(30)
⇒算出した 近似式の 経過日数”X”に 30 を代入することで価格”y”を予測・算出する。
#決定係数
- from sklearn.metrics import r2_score
⇒Scikit-learnを使用して決定係数を算出するためモジュールを呼び出す。
- print(r2_score(y,y2))
⇒ 実際の価格”y”と近似線曲線での予想価格”y2″を基に決定係数を算出する。
非線形単回帰次数 | 30日後の予想価格(円) | 決定係数(1に近いほど○) |
2 | 4,935 | 0.068 |
3 | 54,344 | 0.151 |
4 | 407,842 | 0.289 |
5 | 1139,574 | 0.307 |
6 | -1307,049 | 0.505 |
Pythonの機械学習は独学できないはうそ。高卒の筆者が独学で学んだ話
データサイエンティスト志望者必読の書籍
今回、回帰分析について主に話しましたが、前提条件を設けるというのは機械学習の『決定木』にも関わる部分です。
そういった機械学習の基礎を学び始めた時、基礎から学べるかつわかりやすい勉強方法を模索していた時,この本に出会いました。☟☟☟
Python機械学習プログラミング 達人データサイエンティストによる理論と実践/SebastianRaschka/VahidMirjalili/クイープ【合計3000円以上で送料無料】 価格:4,320
|
サブタイトルにもありますが、AIを作るにはまず機械学習の知識が必要です。機械学習を学ぶには統計処理の知識が必要です。
この本は最低限の基礎知識から応用までを網羅的にかつわかりやすく書いてある素晴らしい一冊です。
高卒技術者の筆者でもわかりやすいと感じました。おそらく世の多くの人がわかりやすいと感じるはず(*’ω’*)
世の中のトレンドはすぐ変化する。最新の情報を常に収集する。AIの勉強方法は?
近年のAI業界、機械学習業界の進歩は目覚ましく、最適なプログラミングに関する最適な学習方法は常に更新されていきます。
私は優秀なビジネスマンや優秀なプログラマーの意見を取り入れ、吸収することも一つの技術であると捉えています。
AIの勉強方法についても同じで、今はすごく便利なツールが増えてます。
初心者でもAIを作れる時代になってきたと言えるのではないでしょうか。
まとめ Pythonでの非線形回帰にはScikit-learnとNumpyを使う!
- PythonのNumpyとskit-learnを組み合わせることで効率的な回帰分析が可能となる。
- 前提条件を満たしている中で,決定係数が高い次数を設定するのが重要。決定係数はScikit-learnで簡単に算出できる。
- CreepyNutsのCDは価格のサンプルが溜まるまであきらめる。多分買えない。
NumpyやScikit-learnはANACONDAというディストリビューションを使うと、Pythonに自動でインストールされます!!AIエンジニアには必須のツールです 😎
座右の銘は明日は明日の風が吹く。虎ぱぱでした♪