〇 LightGBMとは?
LightGBM(ライト・ジー・ビー・エム) は、Microsoft(マイクロソフト)が開発した機械学習ライブラリです。
高速学習 大量のデータを短時間で学習できます
高精度 少ない調整でも良い結果が出やすい
柔軟性 分類(例:スパムかどうか)にも回帰(例:家の価格)にも使えます
〇 今回のテーマ:「回帰」とは?
**回帰(regression)**とは、「数値を予測すること」です。
分類 このメールはスパムか?(はい or いいえ) XGBoost,
LightGBMなど
回帰 家の値段はいくらか?(数値) LightGBM, 線形回帰など
〇 使うもの一覧
ライブラリ 用途
numpy 数値データの操作
matplotlib グラフの描画
sklearn データの分割・評価など
lightgbm 機械学習モデルの構築と予測
〇 ライブラリのインストール(最初に一度だけ)
ターミナルやコマンドプロンプトで以下を実行します:
〇 ステップ1:サイン波のデータを作る
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0, 2 * np.pi,
1000).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0,
0.1, X.shape[0])
補足:
np.linspace は「指定範囲を等間隔で分ける関数」です。
〇 ステップ2:学習用とテスト用にデータを分ける
X_train, X_test, y_train, y_test =
train_test_split(
X, y, test_size=0.2, random_state=42
)
補足:
テスト用データは、モデルの「予測精度を確認するため」に使います。
〇 ステップ3:LightGBMでモデルを学習させる
import lightgbm as lgb
train_data = lgb.Dataset(X_train,
label=y_train)
params = {
'objective': 'regression', # 回帰問題であることを指定
'metric': 'l2', # 損失関数(平均二乗誤差)
'learning_rate': 0.1, # 学習のスピード
'num_leaves': 31, # 木の枝の数(複雑さ)
'verbose': -1 # ログ出力を抑える
}
model = lgb.train(params, train_data,
num_boost_round=100)
〇 ステップ4:予測してグラフで確認
# テスト用データで予測
y_pred = model.predict(X_test)
plt.figure(figsize=(10, 5))
plt.scatter(X_test, y_test, label='正解(sin値)', color='blue', alpha=0.5)
plt.scatter(X_test, y_pred, label='予測(LightGBM)', color='red', alpha=0.5)
plt.xlabel("xの値")
plt.ylabel("sin(x)")
plt.legend()
plt.show()
〇 ステップ5:予測の誤差を数値で確認する
from sklearn.metrics import
mean_squared_error
mse = mean_squared_error(y_test, y_pred)
print(f"平均二乗誤差(MSE):{mse:.4f}")
補足:
MSEが小さいほど、予測と正解のズレが少ない(=よく当たっている)ということになります。
〇 全体コードまとめ
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import
train_test_split
from sklearn.metrics import
mean_squared_error
import lightgbm as lgb
# データ作成
X = np.linspace(0, 2 * np.pi,
1000).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0,
0.1, X.shape[0])
# データ分割
X_train, X_test, y_train, y_test = train_test_split(X,
y, test_size=0.2, random_state=42)
# LightGBM用のデータ形式に変換
train_data = lgb.Dataset(X_train,
label=y_train)
# モデル設定
params = {
'objective': 'regression',
'metric': 'l2',
'learning_rate': 0.1,
'num_leaves': 31,
'verbose': -1
}
# モデル学習
model = lgb.train(params, train_data,
num_boost_round=100)
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"平均二乗誤差(MSE):{mse:.4f}")
plt.figure(figsize=(10, 5))
plt.scatter(X_test, y_test, label='正解(sin値)', color='blue', alpha=0.5)
plt.scatter(X_test, y_pred, label='予測(LightGBM)', color='red', alpha=0.5)
plt.title("LightGBMによるsin関数の予測")
plt.xlabel("xの値")
plt.ylabel("sin(x)")
plt.legend()
plt.show()
〇 最後に
今回は「LightGBMとは?」からはじまり、回帰問題でサイン波の予測を行いました。
0 件のコメント:
コメントを投稿