確率的勾配降下法の実装

関数 learning_schedule() では、各イテレーションにおける、学習率を決定しています.
変数 t0、t1 を用いて学習率が緩やかに下がるように、
次のコードで空欄になっている行に入る適切な選択肢を 1 ~ 3 から選び、
確率的勾配降下法で X、y を学習し傾きと切片を予測してください.

変数 xi 、yi は、各イテレーションで利用するインスタンスと目的変数です.
X_b、y から、インデックス番号で random_index からその次の番号までの配列を抽出し xi、yi に代入されるようにしてください.

import numpy as np

np.random.seed(0)
X = 2 * np.random.rand(100,1)
y = 4 + 3 * X + np.random.rand(100,1)

X_b = np.c_[np.ones((100, 1)), X]

epochs = 50
t0, t1 = 5, 50
m = len(X_b)

def learning_schedule(t):

# Q1:学習スケジュールを決定してください.
return ##########
theta = np.random.randn(2,1)

for epoch in range(epochs):
for i in range(m):

random_index = np.random.randint(m)

[Q1の選択肢]
1. t / (t0 + t1)
2. t0 / (t + t1)
3. t1 / (t + t0)

# Q2:訓練データをランダムに抽出してください.( 2 行とも同じ答えが入ります.)
xi = X_b[##########]
yi = y[##########]

gradients = 2 * xi.T.dot(xi.dot(theta) – yi)
eta = learning_schedule(epoch * m + i)
theta = theta – eta * gradients

print(theta)

[Q2の選択肢]
1. random_index:random_index+1
2. random_index:random_index+10
3. random_index:random_index

確率的勾配降下法

バッチ勾配効果法の説明として正しいものを選択肢 1 ~ 4 から選んでください.

[選択肢]
1. イテレーションごとにランダムにサンプリングされたサンプルを用いて、偏微分によって勾配を計算するため解への収束スピードが早いが、
 解が 1 つに定まらない不規則性をもつ.しかし、モデルが局所的な最小値に収束してしまうのを避けることができる.
2. 無策にいくつかのインスタンスをサンプリングすることでミニバッチを用意し、そのミニバッチを用いて勾配を計算していく.
 収束スピードは早く、また、十分最適な解へ収束することができる.また、 GPU との相性も良い.
3. 全ての訓練インスタンスを用いて勾配を計算するため、安定して最適解に収束することができる.
 しかし、訓練セットが大きくなると収束までに非常に時間がかかる.
4. 最適な解に近くことはできるが、1 つに定まらない.しかし、訓練が進むにつれて徐々に学習率を小さくしていくことで、
 最適解にたどり着くことができる.

確率的勾配降下法 (SGD)

確率的勾配降下法の説明として正しくないものを選択肢 1 ~ 4 から選んでください.

1. ステップごとに、訓練セットから無作為にインスタンス選び出し勾配を計算する.
2. バッチ勾配降下法と比べて計算に時間がかかる.
3. 巨大な訓練セットに対しても、SGD はアウトコアアルゴリズムとして利用できる.
4. 最適な解を求めることはできないが、十分近い解は得られる.

scikit-learn による線形回帰の実装 – 正規方程式

以下のコードでは、Numpy の random モジュールを用いてガウス分布に従う乱数を変数 X に定義しています.
また、関数 y = 4 + 3*X + ガウスノイズ を用いてデータを生成しています.
下記の設問に対する答えとして相応しものを選択肢から選び、次のコードの空欄(##########)を埋めて、
線形回帰モデルで変数 X、y を訓練データとして、 y を予測するモデルを用意してください.

import numpy as np

# Q1:scikit-learn ライブラリから線形回帰モデルをインポートしてください.
##########
[Q1 選択肢]
1. from sklearn.linear_model import LinearRegression
2. from sklearn.linear_model import LinearRegressionClassifier
3. from sklearn.model_selection import LinearRegression
4. from sklearn.model_selection import LinearRegressionClassifier

np.randomseed(0)
X = 2 * np.random.rand(100,1)
y = 4 + 3 * X + np.random.rand(100,1)

# Q2:変数 model に線形回帰モデルを定義してください.
model = ##########

[Q2の選択肢]
1. LinearRegression()
2. LinearRegression
3. LinearRegression(X, y)
4. LinearRegression().fit(X, y)

# Q3:訓練データを用いてモデルを学習させてください.
##########

[Q3の選択肢]
1. model.fit()
2. model.fit(X,y)
3. model.predict()
4. model.predict(X, y)

# Q4:求められた切片を出力してください.
print(##########)
print()

# Q5:求められた説明変数を出力してください
print(##########)

[Q4、5 の選択肢]
1. model.intercept_
2. model.coef_
3. model.bias_
4. model.best_

scikit-learn による線形回帰の実装 – 正規方程式

以下のコードでは、Numpy の random モジュールを用いてガウス分布に従う乱数を変数 X に定義しています.
また、関数 y = 4 + 3*X + ガウスノイズ を用いてデータを生成しています.
下記の設問に対する答えとして相応しものを選択肢から選び、次のコードの空欄(##########)を埋めて、
線形回帰モデルで変数 X、y を訓練データとして、 y を予測するモデルを用意してください.

import numpy as np

# Q1:scikit-learn ライブラリから線形回帰モデルをインポートしてください.
##########
[Q1 選択肢]
1. from sklearn.linear_model import LinearRegression
2. from sklearn.tree import LinearRegression
3. from sklearn.ensemble import LinearRegression
4. from sklearn.model_selction import LinearRegressionClassifier

np.randomseed(0)
X = 2 * np.random.rand(100,1)
y = 4 + 3 * X + np.random.rand(100,1)

# Q2:変数 model に線形回帰モデルを定義してください.
model = ##########

[Q2の選択肢]
1. LinearRegression().predict(X)
2. LinearRegression().Score(X, y)
3. LinearRegression(X, y)
4. LinearRegression().fit(X, y)

# Q3:訓練データを用いてモデルを学習させてください.
##########

[Q3の選択肢]
1. model.score()
2. model.score(X, y)
3. model.fit()
4. model.fit(X,y)

# Q4:求められた切片を出力してください.
print(##########)
print()

# Q5:求められた説明変数を出力してください
print(##########)

[Q4、5 の選択肢]
1. model.best_
2. model.coef_
3. model.bias_
4. model.intercept_

線形回帰モデルのメソッド

以下に、scikit-learn の linear_model.LinearRegression クラスで使えるメソッドを指名している.それぞれのメソッドの役割として
正しいものを選択肢から選んでください.
( linear_model.LinearRegression は変数 lr に代入されています)
Q1:lr.fit(X, y)
Q2:lr.predict(X)
Q3:lr.score(y)
Q4:lr.coef_
Q5:lr.intercept_

[選択肢]
1. 訓練で線形回帰モデルが求めた切片の値を得るためのメソッド
2. 訓練で線形回帰モデルが求めた説明変数の値を得るためのメソッド
3. 訓練済みモデルから、予測値を得るためのメソッド
4. モデルに訓練データを与えて、学習させるためのメソッド
5. 訓練済みモデルから決定係数を算出するためのメソッド

線形回帰モデルのメソッド

以下に、scikit-learn の linear_model.LinearRegression クラスで使えるメソッドを指名している.それぞれのメソッドの役割として
正しいものを選択肢から選んでください.
( linear_model.LinearRegression は変数 lr に代入されています)
Q1:lr.fit(X, y)
Q2:lr.predict(X)
Q3:lr.score(y)
Q4:lr.coef_
Q5:lr.intercept_

[選択肢]
1. モデルに訓練データを与えて、学習させるためのメソッド
2. 訓練済みモデルから決定係数を算出するためのメソッド
3. 訓練済みモデルから、予測値を得るためのメソッド
4. 訓練で線形回帰モデルが求めた切片の値を得るためのメソッド
5. 訓練で線形回帰モデルが求めた説明変数の値を得るためのメソッド

計算量

線形回帰モデルの計算量は O(n^2.4) から O(n^3) となる.
これをもとに特徴量が 4 倍になったと仮定したとき、計算時間は何倍になるか正しいものを選択肢 1 ~ 3 から選んでください.

1. 1.5 ~ 3 倍
2. 27.9 ~ 64 倍
3. 5.3 ~ 8 倍

収束、学習率

学習率について説明している以下の文で空欄に入る適切な単語を選択肢 1 ~ 4 からそれぞれ選んでください.

勾配効果法において重要なハイパーパラメータの 1 つである学習率は (Q1____ ) のサイズを表している.
学習率が ( Q2____ ) と、収束までの反復回数が増え、モデルの学習に時間がかかる.

[Q1の選択肢]
1. ステップ
2. 特徴量
3. GPU
4. メモリ

[Q2の選択肢]
1. 大きすぎる
2. ランダムである
3. 小さすぎる
4. 0