機械学習・データサイエンスのアウトプット

こんにちは、ゆうじ(@yuji_sgs_prog)です。

本記事では、日々の機械学習・データサイエンスのアウトプットをまとめていきます。

記事の目的
  • 自分のアウトプットのため(&モチベ維持)
  • 一個人によるブログやQiitaでのアウトプットが少ないため(企業サイトだとあまり参考にならない)

本記事の目的は上記の通りでして、自分の成長面と世の中のニーズがあると思ったため、記事にまとめようと考えました。

ちなみに本記事を書いている人のスペックは、こんな感じです。

本記事を書いている人のスペック
  • 大学の研究で機械学習を専攻
  • 法人向けにWebマーケティングの仕事を受けている
  • 当メディアを運営(ザコい)

現時点では、ようやく大学の研究で機械学習モデルが適用できたという、圧倒的駆け出し段階です。

いずれは当メディアやマーケティングの仕事にも活かせるようになりたいので、その過程も本記事で伝えられたらなと思います。

そんな感じの見切り発車で記事をまとめていきます。

※日々色んなタスクがあるので、本記事にまとめていく優先順位は低いです。めちゃゆる〜くゆる〜くアウトプットしていくつもりなので、ご了承ください ( ◜◡‾)

目次

初期学習

まずは、僕がどのようにして機械学習・データサイエンスの基礎を身につけたのか、ステップごとに紹介していきます。

STEP
Pythonの基礎を身につける

Progateとかでもいいですが、僕自身動画で学習する方が性に合っているので、上記の方々のYouTubeを参考にさせていただきました。(無料ですし)

動画で紹介されるコードを猿真似のようにアウトプットしていく感じです。

また、慣れてきたら「Paiza」というプラットフォームでアウトプットするのもおすすめです。

STEP
スタアカというプラットフォームを2〜3周

次にスタアカという、月額980円でAI / データサイエンスが学べるプラットフォームを活用しました。

Progateよりも安い金額でAI / データサイエンスが体系的に理解できたのはありがたかったです。

STEP
ゼロから作るディープラーニング

ディープラーニングの理論がめちゃわかりやすく解説されている神本(誰もがおすすめしている名著です)

これのおかげでディープラーニングの理解が深まりました。

多少回り道はしたものの、上記のステップが僕の基礎を作ってくれました。

ここからは日々アウトプットしつつ、研究や仕事に活かしていきたいです(*`・ω・)ゞ

また、下記ツイートのような考えはすごく大事だなぁと思います。

結局どれだけ難解な理論を身に付けたとしても、それを活かせなかったら意味ないですよね。

頭カッチカチおじさんにならないように気をつけていきます。

大学の研究によるアウトプット

2022/11/20

まずは研究で構築した学習モデルをアウトプットしていきます。(だいぶ簡潔にまとめるので、解説は別記事にまとめるかもです。)

【2022年12月22日追記】下の記事にて詳しい内容を解説してるので、よかったら参考にどうぞ<(_ _)>

Google Colaboratoryで自前csvファイルのデータをニューラルネットワークで学習させて、回帰分析を行うといった内容です。(自前csvファイルはこちら。※クリックするとダウンロードします)

# 使用するライブラリをインポート
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

import io
from google.colab import files

from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import Adam
from keras.layers.core import Dropout
from keras.callbacks import EarlyStopping, LearningRateScheduler

from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from math import sqrt
from sklearn.metrics import r2_score


# Google Colaboratoryでファイルをアップロード
uploaded = files.upload()


# データフレームとして、変数dfに3列×10000行のデータを格納
df = pd.read_csv(io.BytesIO(uploaded['data10000.csv']))


# データの分割
(train, test) = train_test_split(df, test_size=0.2, shuffle=True)

# x_train, x_testではcsvファイルの1列目から2列目を,y_train, y_testでは3列目のデータを活用
x_train = train.iloc[:, [0, 1]]
y_train = train.iloc[:, [2]]

x_test = test.iloc[:, [0, 1]]
y_test = test.iloc[:, [2]]


# データの正規化
x_train = (x_train - x_train.min()) / (x_train.max() - x_train.min())
x_test = (x_test - x_test.min()) / (x_test.max() - x_test.min())


# モデルの構築
# inputの数
n_in = 2

# ノードの数
n_hidden = 16

# outputの数
n_out = 1

# 学習回数
epochs = 50
batch_size = 64

model = Sequential()
model.add(Dense(n_hidden, activation= 'relu', input_dim=n_in))
model.add(Dense(n_hidden, activation= 'relu', input_dim=n_in))
model.add(Dense(n_hidden, activation= 'relu', input_dim=n_in))
model.add(Dense(units=n_out))
model.summary()

optimizer = Adam(lr=0.001, beta_1=0.9, beta_2=0.999)
model.compile(loss='mean_squared_error', optimizer=optimizer)


# 学習オプション
history = model.fit(x_train, y_train, epochs=epochs, batch_size=batch_size, validation_data=(x_test, y_test))


# 構築したモデルで予測
test_predict = model.predict(x_test)


#精度評価指標
# MAE
test_MAE = mean_absolute_error(y_test, test_predict)
print('MAE:', test_MAE)

# MSE
test_MSE = mean_squared_error(y_test, test_predict)
print('MSE:', test_MSE)

# RMSE
test_RMSE = sqrt(mean_squared_error(y_test, test_predict))
print('RMSE:', test_RMSE)

# 決定係数
R2 = r2_score(y_test, test_predict)
print('R2:', R2)

# MAEに対するRMSEの比
print('RMSE/MAE:', test_RMSE / test_MAE)


# 損失関数
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = len(loss)
plt.plot(range(epochs), loss, marker='.', label='loss')
plt.plot(range(epochs), val_loss, marker='.', label='val_loss')
plt.legend(loc='best')
plt.grid()
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()


# Observed-Predicted Plot
plt.figure()
plt.scatter(y_test, test_predict, c='blue', alpha=0.8)
plt.ylim(plt.ylim())
plt.grid()
plt.xlabel('observed_data')
plt.ylabel('predict_data')
plt.show()

上記コードを実行した損失関数(左グラフ)とObserved-Predicted Plot(右グラフ)は以下の通り。

いい感じに学習して、精度を予測できていることがわかります。(素人目の感想)

ただ、パラメーターが2つという圧倒的な少なさなので、学習回数は20〜30回でも良さそうですね。

ちなみに精度評価指標は下記のような感じです。

MAE: 0.02991514426947141   # 0に近いほど良い
MSE: 0.001563834395335399   # 0に近いほど良い
RMSE: 0.03954534606417548   # 0に近いほど良い
R2: 0.9988363429433301   # 1に近いほど良い
RMSE / MAE: 1.3219172773481072   # 1.253に近いほど良い

ここら辺の理論は気が向いたらまとめます。(参考記事はこちら

一旦おわり。

データサイエンスのアウトプット

2022/12/22

まだ全くといっていいほどデータサイエンス的な活動はできてないですが、良い感じの学習サイトを見つけたので共有。

アルゴリズムから統計、データサイエンスの部分まで、わかりやすい内容が完全無料で学習できる良いWebサービスです。

ただ、割と量がありそうなので、コツコツと学習していきます〜

Thank you for sharing my post !!
  • URLをコピーしました!
目次