import numpy as np
import matplotlib.pyplot as plt
from sklearn.neural_network import MLPClassifier
from sklearn.neural_network import MLPRegressor
from sklearn.metrics import mean_squared_error
dat = np.zeros([20, 3])
# 販売数
dat[:, 0] = [10, 20, 30, 40, 50,
60, 70, 80, 90, 100,
110, 120, 130, 140, 150,
160, 170, 180, 190, 200]
# ネガティブな口コミ数
dat[:, 1] = [24, 31, 19, 22, 33,
17, 21, 16, 19, 18,
11, 13, 32, 14, 12,
9, 8, 14, 3, 1]
# ポジティブな口コミ数
dat[:, 2] = [3, 4, 8, 5, 2,
12, 15, 17, 14, 9,
19, 18, 14, 17, 20,
22, 19, 18, 8, 23]
Aさんは、卒業研究のため、商品のオンライン販売に興味を持ち、Webページ上で売れる商品にはどのような特徴があるのか調べようとしました。このため、まず、商品が売れる、売れないには、
この2つが影響を持つと考えました。このため、2020年に発売されたイヤホンを20製品調べ、その販売数とともに、口コミ数を集めました。これを、numpy配列に格納しています。データは以下のように格納されています。
「ネガティブな口コミ数、ポジティブな口コミ数」から、「販売数」を実数として予測するニューラルネットワークを構築してください。回帰問題となります。
この際、Lossを表示するグラフも描画してください。
MSEが高いほうが良いか、低いほうが良いか、考えてください。
集めたデータのMSEを算出し、これが1500未満のモデルを作成してください。
ネガティブな口コミ数が10, ポジティブな口コミ数が15の製品の販売数を予測してください。
### 問題1の答え
# データの整理
X = dat[:, 1:]
Y = []
for i in range(len(dat[:, 0])):
if dat[i, 0] >= np.mean(dat[:, 0]):
Y.append("売れる")
else:
Y.append("売れない")
# ニューラルの定義 & 学習
NNcr = MLPClassifier(
hidden_layer_sizes=(3, ), #中間層の次元数
max_iter=5000, # 学習回数
learning_rate_init=0.01, # 学習係数
random_state=0, # 乱数シード
verbose=False # 学習過程の可視化 True: 可視化する、False: 可視化しない
)
NNcr.fit(X, Y)
# Loss可視化
loss = NNcr.loss_curve_
plt.plot(loss)
plt.ylabel("Loss")
plt.xlabel("Iteration")
plt.grid()
# 正答率算出
c = 0
for i in range(len(Y)):
x1 = X[i, 0]
x2 = X[i, 1]
temp = NNcr.predict([[x1, x2]])
if temp == Y[i]:
c = c + 1
print("正答率: ", c/len(Y))
# 予測
a = NNcr.predict([[10, 15]])
print("予測結果: ", a)
### 問題2の答え
# データ整理
X = dat[:, 1:]
Y = dat[:, 0]
# ニューラルの定義 & 学習
NNreg = MLPRegressor(
hidden_layer_sizes=(5, ), #中間層の次元数
max_iter=15000, # 学習回数
learning_rate_init=0.001, # 学習係数
random_state=0, # 乱数シード
verbose=False # 学習過程の可視化 True: 可視化する、False: 可視化しない
)
NNreg.fit(X, Y)
loss = NNreg.loss_curve_
plt.plot(loss)
plt.ylabel("Loss")
plt.xlabel("Iteration")
plt.grid()
# MSE算出
Ypred = []
for i in range(len(Y)):
x1 = X[i, 0]
x2 = X[i, 1]
temp = NNreg.predict([[x1, x2]])
Ypred.append(temp)
mse = mean_squared_error(Ypred, Y)
print("MSE: ", mse)
a = NNreg.predict([[10, 15]])
print("予測結果", a)