lightGBMの一番カンタンなデータ(テストの点数から、合否を予測)で機械学習してみた。
タイタニック号ですらややこしいので、めっちゃシンプルな機械学習モデルをpythonで書いてみた。入力=点数、出力=合否で、点数から合格点を推測する!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
from sklearn.model_selection import train_test_split import lightgbm as lgb from sklearn.metrics import accuracy_score #乱数で、点数と合否の配列を生成 l = list() for num in range(1000): score = random.randint(0, 100) # 点数 result = 1 if score >= 60 else 0 # 60点以上で合格(1) l.append([score, result]) # pandasでデータフレーム化 df = pd.DataFrame( columns=["score", "result"], data=l ) X = df["score"].values # 説明変数X(テストの点数) y = df["result"].values # 目標変数y(合格=1) # 学習データとテストデータ(20%)に分離する。 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.2, shuffle=False, ) # パラメータ(説明変数)は複数が基本なので、2次元配列にする # [1,2,3] => [[1],[2],[3]] X_train = np.array(X_train).reshape(-1,1) X_test = np.array(X_test).reshape(-1,1) # LightGBM(Gradient Boosting Machine)モデルを生成。 clf = lgb.LGBMRegressor() # 80%学習データから、合格を予測する機械学習モデルを作る clf.fit( X_train, y_train, ) # 残り20%をテストデータとして、点数から合格・不合格を予測する y_pred = clf.predict(X_test) # テストデータの正解(y_test)と答え合わせして、どのくらい予測が当たっていたか検証する。 # y_pred > 0.5で、1だけ(合格)検証している。one-hot方式(0/1だから片方だけでOK) print(accuracy_score(y_test, y_pred > 0.5)) # 100%当たっている。 |