モデルを作成する
プログラム(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 |
# -*- coding: utf-8 -*- import pandas as pd import numpy as np from sklearn.neural_network import MLPClassifier from sklearn import metrics import joblib # CSVァイルからデータフレームに読み込む df = pd.read_csv("data_mlp.csv") # 説明変数を設定する:x1,x2 x = df.loc[:, ['x1', 'x2']].values # 目的変数を設定する:x3 y = df['x3'].values # モデルを作成する solver = "sgd" random_state = 0 max_iter = 10000 clf = MLPClassifier( solver=solver, random_state=random_state, max_iter=max_iter) clf.fit(x, y) print("決定係数:", clf.score(x, y)) # モデルを出力する joblib.dump(clf, 'model_mlp.learn') |
データファイル
実行結果
1 |
決定係数: 1.0 |
モデルで予測する
入力データファイルは「モデルを作成する」で生成したファイルを使用する。
プログラム(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 49 50 51 52 53 54 55 56 57 |
# -*- coding: utf-8 -*- import pandas as pd import numpy as np import joblib import matplotlib.pyplot as plt # 学習結果を読み込みする clf = joblib.load('model_mlp.learn') # データを読み込みする df = pd.read_csv("data_mlp_test.csv", sep=",") # 説明変数を設定する:x1,x2 train_X = df.loc[:, ['x1', 'x2']].values # 学習結果を利用して予測する train_y = clf.predict(train_X) # 境界線プロット用の格子状データを生成 x1 = np.linspace(0.0, 10.0, 100) x2 = np.linspace(0.0, 10.0, 100) X1, X2 = np.meshgrid(x1, x2) plot_X = np.c_[X1.ravel(), X2.ravel()] # 入力 plot_y = clf.predict(plot_X) # グラフ設定 fig_size_x = 10 fig_size_y = 10 lim_font_size= 22 plt.figure(figsize=(fig_size_x, fig_size_y)) ax = plt.axes() plt.rcParams['font.family'] = 'Times New Roman' # 全体のフォント plt.rcParams['font.size'] = lim_font_size # 全体のフォント plt.rcParams['axes.linewidth'] = 1.0 # 軸の太さ # 格子データで散布図をプロットし、決定境界を描画(y=0:blue, y=1:red, y=2:green) plt.scatter(plot_X.T[0][plot_y == 0], plot_X.T[1][plot_y == 0], marker='o', color="blue", alpha=0.1) plt.scatter(plot_X.T[0][plot_y == 1], plot_X.T[1][plot_y == 1], marker='o', color="red", alpha=0.1) plt.scatter(plot_X.T[0][plot_y == 2], plot_X.T[1][plot_y == 2], marker='o', color="green", alpha=0.1) # 学習用データを散布図にプロット(y=0:blue, y=1:red, y=2:green) plt.scatter(train_X.T[0][train_y == 0], train_X.T[1][train_y == 0], marker='o', label="0", color="blue", alpha=1.0) plt.scatter(train_X.T[0][train_y == 1], train_X.T[1][train_y == 1], marker='o', label="1", color="red", alpha=1.0) plt.scatter(train_X.T[0][train_y == 2], train_X.T[1][train_y == 2], marker='o', label="2", color="green", alpha=1.0) plt.legend(loc=1) # 凡例の表示(2:位置は第二象限) plt.title('MLP TEST', fontsize=lim_font_size) # グラフタイトル plt.xlabel('x1', fontsize=lim_font_size) # x軸ラベル plt.ylabel('x2', fontsize=lim_font_size) # y軸ラベル plt.grid() # グリッドの表示 # plt.show() plt.savefig('graph_mlp.png') plt.close() # バッファ解放 |