buto > /dev/null

だいたい急に挑戦してゴールにたどり着かずに飽きる日々です

Python scikit-learnで学習してみる

機械学習の「学習」ってなんだろう

単回帰分析を使って予測する、というのはやってみて理解できてきたけど 学習するって一体何をしているんだ?? 社内のエキスパートにご教授いただけました!

「回帰分析の学習」は直線(グラフ)の傾きと切片を全データにより近づくように修正する

気温とチョコレートの売り上げグラフ(データは勝手に作った)だと 赤い直線の傾きと位置(切片)を青い点(1つずつのデータ)により近づけることが学習

f:id:butorisa:20201020140111p:plain

繰り返し学習して予測精度を上げる

機械学習の学習→予測のイメージとして学習を繰り返すと予測精度がどんどん上がる というイメージがありました そういう体験をしてみたい。。。 学習をたくさんしたからと言って予測精度が上がるってことではないようです(過学習

学習やってみたい!

予測精度の向上は先延ばしにして、まずはscikit-learnの回帰モデルで学習やってみる! 回帰分析する元ネタ:scikit-learnで単回帰分析 気温とチョコの売り上げです お手本にしたコード:Scikit-learn で線形回帰

import numpy as np
import pandas as pd
from sklearn import preprocessing, linear_model
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
%matplotlib inline

data = pd.read_csv('./data_choco.csv', header=0)
pd.DataFrame(data)

f:id:butorisa:20201020140201p:plain

# 説明変数
x = data[['highest_temperature']]
# 目的変数
y = data['sales_amount']

#データの整形
sc=preprocessing.StandardScaler()
sc.fit(x)
x_std = sc.transform(x)

#学習データとテストデータに分割する
#学習データが80%、テストデータが20%
X_train, X_test, Y_train, Y_test = train_test_split(x_std, 
                                                    y, 
                                                    test_size=0.2, 
                                                    random_state=0)

#線形回帰モデルの生成および学習
clf = linear_model.SGDRegressor(max_iter=1000)
clf.fit(X_train, Y_train.values.ravel())

print("回帰式の係数")
print('y切片:', clf.intercept_) 
print('各項目の係数',clf.coef_) 

回帰式の係数 y切片: [220.14770493] 各項目の係数 [-36.70680156]

Y_pred = clf.predict(X_test)

#与えられたデータに対する予測
compare = pd.DataFrame(np.array([Y_test, Y_pred]).T)
compare.columns = ['正解','予測値']
compare[:7]

f:id:butorisa:20201020140219p:plain

インプットデータが7件しかないのでしょぼいですが、予測値を正解と見比べると 当たっているとは言えないけれど、がんばってる感ありますね