| |
Pandasの機械学習処理でよくある操作
DataFrameの指定した列「以外」を抽出する
二つの方法があります。どちらも別の変数に代入する必要がある点に注意です。
# 方法1
df = df.drop('DATA_ID', axis=1)
# 方法2
df = df[df.columns[df.columns != 'DATA_ID']]
|
LabelEncoder
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
managers_encoded = le.fit_transform(df['MANAGER'].values)
# 下記で一括逆変換して結果を持っておく方法もある
#managers_decoded = le.inverse_transform(managers_encoded)
df['MANAGER_E'] = managers_encoded
# 復元ができることを確認
print(le.inverse_transform([0]))
|
複数列を一括して正規化する方法
from sklearn.preprocessing import MinMaxScaler
ms = MinMaxScaler()
df2 = ms.fit_transform(df1)
|
のように、正規化は MinMaxScaler、標準化はStandardScalerで行えますが、
dfの全ての列を一括して変換するには自分で式を書いて次のようにします。
# 正規化
df = df.apply(lambda x: (x-x.min())/(x.max() - x.min()), axis=0)
# 標準化
df = df.apply(lambda x: (x-x.mean())/x.std(), axis=0)
|
テストデータのn行目から元データを特定する
X_test[0]は、df上で何行目のデータだった?これもよくある操作だと思います。
# テストデータの先頭行を出力
print(X_test.iloc[0])
# それに対応する、元データ中の行番号(先頭が0)
lineno = X_test.iloc[0].name
# 元データを出力
print(df.iloc[lineno])
# 元データの先頭から5列の値のリスト。ilocを使うと行も列も数字でしか指定できないので注意
print(df.iloc[lineno, 0:5].values.tolist())
# 元データを連結して目視で分かる文字列で出力。
# numpy.float64型を含むのでastype(str)が必要
indata = "/".join(df.iloc[lineno, 0:5].values.astype(str).tolist())
print(indata)
それを踏まえて、テストデータの1件ごとに予測値と正解を並べて表示する
y_pred = model.predict(X_test)
for in in range(len(y_test)):
lineno = X_test.iloc[i].name
indata = "/".join(df.iloc[lineno, 0:5].values.astype(str).tolist())
print("[{}][{}] correct:{} predict:{}".format(i, indata, y_test.iloc[i,0], y_pred[i]))
|

(first uploaded 2024/02/11 last updated 2024/02/20, URANO398)
|