見よう見まねのPython初心者です。
LightGBMで構築したモデルでAを予測をしたいと思っています。
データにはカテゴリ変数と欠損値が含まれています。
(A_DATA)
|A|B|C|D|E|F|G|
|:--|:--:|--:|
|1|1||1|A|1|1|
|2|2|2|2|B||2|
|3|2|4|4|A|3|2|
|4|5|5|6|B|3|5|
|5|5||3|A|2|3|
|2|1|2|1|B|1|1|
|5|2|2|2|B|3|2|
|3|2|4|4|B|3|2|
|4|5|5|6|B|3|5|
|2|5|6|3|B|2|3|
import numpy as np import pandas as pd import os import sys import lightgbm as lgb from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import seaborn as sns
# A_DATA読み込み data = pd.read_excel("A_DATA.xlsx") # 学習データとテストデータを分ける train_data, test_data = train_test_split(data, test_size=3, random_state=0) # 特徴量はB、C、D、E、F、G Eをカテゴリ ターゲットはA def create_feature(data): feature = data[["B", "C", "D", "E", "F", "G"]].copy() cat_cols = ['E'] feature[cat_cols] = feature[cat_cols].astype("category") return feature X_train = create_feature(train_data) y_train = train_data["A"] # LightGBMでモデル構築 X_trn, X_val, y_trn, y_val = train_test_split(X_train, y_train, test_size=3, random_state=0) lgb_dataset_trn = lgb.Dataset(X_trn, label=y_trn, categorical_feature='auto') lgb_dataset_val = lgb.Dataset(X_val, label=y_val, categorical_feature='auto') params = { 'objective' : 'rmse', 'learning_rate' : 0.1, 'max_depth' : -1, } model = lgb.train( params=params, train_set=lgb_dataset_trn, valid_sets=[lgb_dataset_val], num_boost_round=100, early_stopping_rounds=10, verbose_eval=10 )
このモデルに値(B=6、C=1、D=2、E="B"、F=5、G=4、A=-1)を入力すると
# Aを予測 B=6、C=1、D=2、E="B"、F=5、G=4、A=-1 data = data.append(pd.DataFrame.from_dict({ "B": [6], "C": [1], "D": [2], "E": ["B"], "F": [5], "G": [4], "A": [-1] })).reset_index(drop=True) data.replace(0,np.nan) X = create_feature(data) model.predict(X[-1:])
array([2.5])とAの予測結果が表示されます。
これで例えば3件分のデータでAを予測したい場合、
・B=6、C=1、D=4、E="B"、F=3、G=2、A=-1
・B=1、C=2、D=3、E="A"、F=2、G=4、A=-1
・B=3、C=2、D=1、E="B"、F=5、G=1、A=-1
入力するパラメータが多いのと1件ずつ入力しないといけないので、何とかまとめて入力できないかと考えています。
可能なら、
・[6,1,4,B,3,2,-1]
・[1,2,3,A,2,4,-1]
・[3,2,1,B,5,1,-1]
という感じに行方向だと入力も楽になります。
for文を使うとは思いますが、いまいち文法が理解できていません。
是非ともご教授下さるようお願いいたします。
回答2件
あなたの回答
tips
プレビュー