以下のサイトがわかりやすようだったので、訳も分からないが、線形回帰をやってみました。
https://smart-hint.com/ml/linear-regression/
やりたいこと
(たぶん)チップ価格に最も影響を与えているのは、どの要因か
個人的ピックアップしたいコード
df_x = df.drop('tip', axis=1)
df_y = df['tip']
内容
チップの値段列だけを、別のデータフレームに移す
なぜ
構図として、
チップの値段(主役)VS チップの取り巻き(脇役たち)だから。
どの脇役が、主役であるチップの値段を引き立たせるのかを知りたい回だから?
df_x = pd.get_dummies(df_x)
内容
文字列のデータを数値型に変換する
なぜ
学習には、数値型のデータが必要だから
train_x, test_x, train_y, test_y = train_test_split(df_x, df_y, random_state=6)
内容
学習用とテスト用にデータを分割する
なぜ
後々、学習の精度を振り返るため
model.fit(train_x,train_y)
pred = model.predict(test_x)
内容
学習→予測
ポイント
fitで学習
predictで予測
print(model.coef_)
print(model.intercept_)
内容
係数と切片を算出
なぜ
描画したいのは、傾きと切片がある直線だから
from sklearn.metrics import mean_squared_error
import numpy as np
rmse = np.sqrt(mean_squared_error(test_y,pred))
rmse
内容
予測値がどれくらい正確かを評価
どうやって
RMSEという指標が定番らしい。その指標の算出は、2つのライブラリを使えば1行で可能みたい。
内容
機械学習の予測値精度 と 一般的な感覚の精度 を比較
どうやって
RMSEという指標を使って。
小さいほうが精度が高い。
機械学習の予測値精度 と 一般的な感覚の精度
0.91 < 1.61 なので、
機械学習の予測値のほうが、精度が高い。
(人間の感覚が、コンピュータの計算に負けた)
result = []
num = []
result_df = pd.DataFrame()
for i in range(1,40):
tip_num = test_x['total_bill']*(i/100)
rmse = np.sqrt(mean_squared_error(test_y,tip_num))
result.append(rmse)
num.append(i/100)
pd.DataFrame(result,num).plot.bar(figsize=(12,4), legend=False)
内容
総額当たりの%の範囲を広げて、チップ額を予測
結果
機械学習による予測値の精度 0.91を下回る(より正確)ものはない。。
やはり、機械学習に軍配。
まとめ
今回は、とても平易な言葉で解説していたサイトを参考にしたため、機械学習でやろうとしていることが理解できた。
要は、これまで「なんとなく」に頼っていた人間の感覚とか勘ではなくて、もっと正確な予測をコンピュータを使ってやりましょうよ、というのが機械学習かなと解釈した。やや乱暴な気がするけど。でもまあ、人間の直感よりもコンピュータが導いた予測のほうが正確であるというのは、現実世界いろんな場面で体現しているから、機械学習を学ぼうとしている僕も、機械学習の精度をもっともっとあげようとする人類全体の思考も理解はできる。
人間が負けるなんて、悲しい。と思う気持ちもほんの少しあるにはあるが、やっぱりより良いほうを求める気持ちのほうが強いので、機械学習を学習していこうと思う。