テキトーなCSVファイルを用意してscikit-learnをテキトーに使ってみる
機械学習の本を読んでサンプルをいじっているだけでは、わかったつもりになるだけで実際に使えるようにはならないので、本当にテキトーなデータで機械学習してみる。
まず、テキトーなCSVデータ(「train.csv」って名前で保存)を用意する。下のは一部でこんな感じでたくさん用意する。
YYYY,MM,DD,DY,target 2018,1,20,土,2038 2018,1,21,日,2039 2018,1,22,月,2040 2018,1,23,火,2041 2018,1,24,水,2042 2018,1,25,木,2043
このCSVの「target」行を予測するモデルを作ってみる。
import pandas as pd from sklearn.preprocessing import LabelEncoder from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsRegressor from sklearn.externals import joblib train_csv_file = "train.csv" target_column_name = "target" data = pd.read_csv(train_csv_file, encoding="SHIFT-JIS", sep=",") le = LabelEncoder() for col in data.loc[:, data.dtypes == 'object']: data[col] = le.fit_transform(data[col]) for col in data.loc[:, data.dtypes == 'int32']: data[col] = data[col].astype(float) X = data.loc[:, data.columns != target_column_name].as_matrix() y = data[target_column_name].as_matrix() scaler = StandardScaler() scaler.fit(X) X = scaler.transform(X) X_train, X_test, y_train, y_test = train_test_split(X, y) model = KNeighborsRegressor(n_neighbors=5) model.fit(X_train, y_train) print("Train score: {:.2f}".format(model.score(X_train, y_train))) print("Test score: {:.2f}".format(model.score(X_test, y_test))) joblib.dump(scaler, "foo.scaler") joblib.dump(model, "foo.learn")
こんななんの役にも立たないモデルでも一応、動くものを作った方が勉強にはなるだろう。