機械学習コース復習ノート

1. 緒論

機械学習の概念

確定的なプログラミングを必要とせずに機械に特定のスキルを与えることができる

Performance Task Experience、プログラムがEを使用してT上でPを向上させた場合、それは学習である

タスクの種類によって分類:回帰、分類、クラスタリング、次元削減

学習方法によって分類:教師あり学習、教師なし学習、強化学習

2. モデルの評価と選択

重点章 各種評価指標、コードの記述、ライブラリ関数の呼び出し

例題として共分散行列、適合率、混同行列、ROC曲線

基本的な知識点として過学習問題とその解決策

経験誤差empirical error: トレーニングセット上の誤差(トレーニング誤差)

汎化誤差generalization error:将来のサンプル上の誤差

汎化誤差は小さいほど良いが、経験誤差が必ずしも最適ではない。

評価方法

留出法hold-out

X_train,X_test,y_train,y_test=train_test_split()

  • データの分布を一貫して保持
  • 複数回のランダム分割、実験を繰り返して平均値を取る
  • 適切なテストセットの割合

交差検証法cross validation

まずデータセットをk個の同じ大きさの排他的なサブセットに分割し、各サブセットのデータ分布を一貫して保証し、k-1個のサブセットをトレーニングセットとして選択し、残りをテストセットとして使用します。これにより、k組のトレーニング/テストセットを取得し、k回のトレーニングとテストを行うことができます。

image.png

1
2
3
4
5
6
7
model = linear_model.Lasso()
cv_results = sklearn.model_selection.cross_validate(model,X,y,cv=3)
# 第二種
kf = KFold(3)
for train_idx,test_idx in kf.split(X):
	X_train,X_test = X[train_idx],X[test_idx]
	y_train,y_test = y[train_idx],y[test_idx]

特に、$k=m$の場合、交差検証は留一法Leave One Outに変わります:

  • ランダムサンプルの分割方法の影響を受けない、なぜなら唯一の分割方法があるからです——各サブセットに1つのサンプル;
  • トレーニングセットにはできるだけ多くのサンプルが含まれており、実際に評価されるモデルと期待されるモデルが非常に似ています;
  • トレーニングの負担が大きい
  • 評価結果が他の評価方法よりも正確であるとは限らない

自助法bootstrap

有放回重複サンプリングを使用してデータセットを構築し、$\frac{1}{e} = 0.368$の元のデータが決してサンプリングされない部分をテストセットとして使用します。

性能測定

$$MSE = \frac{1}{m}\sum_{i=1}^{m}(f(x_i)-y_i)^2$$ $$MAE = \frac{1}{m}\sum_{i=1}^{m}\vert f(x_i)-y_{i}\vert$$ image.png image.png image.png image.png

ROC曲線の横軸は偽陽性率、縦軸は真陽性率で、囲まれた面積はAOCであり、面積が大きいほど良い。

比較検証

テストセット上の性能はモデルの真の性能を反映できず、統計的仮説検定を行い、統計的に優れているかどうかを推測する必要があります。理由:

  • テスト性能は汎化性能と等しくない
  • テスト性能はテストセットの変化に伴って変化する
  • 機械学習アルゴリズム自体に一定のランダム性がある バイアスとバリアンス 回帰タスクに対して、汎化誤差はバイアスbias、バリアンスvariance、ノイズの和に分解できます。 $$E(f;D)= bias^{2}(x)+var(x)+ \epsilon^2 $$ image.png

トレーニングの過程で、通常は徐々にバイアス主導からバリアンス主導に移行します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
//留出法
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25)
//k折交差検証
kf=KFold(n_split=3)
//p回のk折交差検証を繰り返す
rkf=RepeateKFold(n_split=3,n_repeats=2)
//層化k折交差検証
skf=StratifiedKFold(n_split=4)
//留一法
loo=LeaveOneOut()
//性能測定
metrics.mean_squared_error(y_true,y_pred)
np.sqrt(metrics.mean_squared_error(y_true,y_pred))
metrics.mean_absolute_error(y_true,y_pred)
//混同行列
confusion_matrix(y_true,y_pred,labels=[0,1,2])
//P-R図を描く
precision, recall, thresholds = precision_recall_curve(y_true, y _pred)
plt.plot(recall, precision)

3. 線形モデル

勾配(共分散)の概念、計算、解法(手作業、コード)

最小二乗法:損失関数を微分し、導関数=0とし、解を得る: $$w= \frac{\sum\limits_{i=1}^{m}y_{i}(x_{i}-\bar x)}{\sum\limits_{i=1}^{m}x_{i}^{2}-\frac{1}{m}(\sum\limits_{i=1}^{m}x_{i})^2}$$ $$b = \frac{1}{m}\sum\limits_{i=1}^{m}(y_{i}- wx_{i})$$ ロジスティック回帰:線形モデルを使用して分類タスクを行い、ロジスティック関数(sigmoid)を使用

線形判別分析LDA: 与えられたトレーニングサンプルセットに対して、サンプルを直線に投影し、同じクラスの点ができるだけ近く、異なるクラスの点ができるだけ遠くなるようにします。共分散を通じて、最適化目標はレイリー商を最大化することです。

多分類学習:一対一($\frac{n*(n-1)}{2}$)個の分類器、一対残り(n個の分類器)、多対多(ECOC)

1
2
3
4
5
6
7
8
9
def train(epoches = 1 ,l r = 0.01):
	for epoch in range(epoches):
		# 前向き伝播
		output = inputs.mv(w) # 出力y'=wxを計算
		loss = (target - output).pow(2).sum()
		loss.backward()
		w.data -=  lr* w.grad
		w.grad.zero_()
sklearn.linear_model.LinearRegression()

勾配降下:$w^{t+1} = w^{t} - \eta \frac{\partial L}{\partial w}$ $$Conv(x,y) = \frac{\sum_{i=1}^{n} (x_{i}-\bar x)(y_{i} - \bar y)}{n-1}$$ $$Conv(x,y) = Conv(y,x)$$ $$Conv(x,x) = Var(x)$$

1
2
3
4
a = np.array([1,3,4,5])
b = np.array([2,6,2,2])
z = np.stack((a,b))
np.cov(z)

4. ニューラルネットワーク

重点章

BP導出、計算、誤差計算、アルゴリズム

パーセプトロン

原始形式

image.png

ここで$L(w,b)$は損失関数であり、すべての誤分類された点から超平面までの距離に関連しています。トレーニングの過程は損失関数が収束する過程です。 パーセプトロンアルゴリズムは収束します:データが線形に分離可能な場合、パーセプトロンは有限回の探索でトレーニングデータを完全に正しく分離する分離超平面を見つけることができます。

対偶形式

image.png

ニューラルネットワーク

逆伝播

アルゴリズムのステップ:初期化-サンプル出力の前向き計算-出力層の勾配$g$の計算-隠れ層の勾配$e$の計算-接続重みとしきい値の更新

前向き計算:バイアス値は引かれるべきです

逆伝播:出力層ノードの勾配:

$$ g = \hat y_{j}(1- \hat y_{j})(y_{j}- \hat y_j) $$ ここで$\hat y_j$は計算された出力値であり、$y_{j}$は期待値(真の値、ラベル)です

隠れ層のノード勾配:

$$e = b_n(1-b_n)\sum_{j=1}^{l}w_{hj}g_{j}$$ image.png image.png

過学習

対策:早期停止と正則化

早期停止

  • トレーニング誤差が連続して数ラウンドで小さく変化した場合、トレーニングを停止
  • 検証セットを使用:トレーニング誤差が減少するが検証誤差が増加する場合、トレーニングを停止

正則化

誤差目標関数にネットワークの複雑さを記述する項を追加し、ネットワークが小さな接続重みとしきい値を好むようにし、ネットワークの出力をよりスムーズにします。

Local minima

シミュレーテッドアニーリング、ランダム摂動、遺伝的アルゴリズム、モーメントメカニズム….

活性化関数

ネットワークの非線形表現能力を高める役割を果たします。 要求:

  • 連続的で微分可能な非線形関数
  • 関数とその導関数はできるだけ簡単であるべきで、計算に利する
  • 導関数の値域適切な範囲にあるべきで、そうでないとトレーニングの効率と安定性に影響を与える $$sigmoid = \frac{1}{1+e^{-x}}$$

5. 最適化理論と方法

凸集合、凸関数の証明、図解法、対偶問題

序論

凸集合:n次元ユークリッド空間内で、任意の2点を結ぶ線が依然としてこの空間内にある場合、それは凸集合です。形式的な記述は$\lambda x_{1}+ (1-\lambda) x_{2} \in S$

凸関数: 定義域内で、任意の$x$に対して$f(\lambda x_{1}+ (1-\lambda ) x_{2}) <= \lambda f(x_{1}+ (1- \lambda)f(x_2))$ が成り立つ場合、それは凸関数です。凸関数は凹であり、凹関数は凸です。 ヘッセ行列が半正定であれば、関数は凸関数であり、正定であれば厳密凸関数です。

凸計画:凸集合上で凸関数の極小点を求めること。凸計画の局所極小点は全局極小点であり、極小点の集合は凸集合です。目標関数が厳密凸関数であり、極小点が存在する場合、極小点は一意です。

線形計画

線形計画の標準形式は次の通りです: $$
\begin{align*} min \quad cx \ s.t. \quad Ax = b, \ x \geq 0, \end{align*} $$

  1. 図解法
  2. 基本的な性質
  • 線形計画の可行領域は凸集合です
  • 最適解が存在する場合、必ず極点で取られます
  1. 可行解 線形計画の標準形式において、行列Aのランクをmとし、$A=[B,N]$ と仮定します。ここでBはm次の可逆行列であり、次のように表されます: $$ x= \begin{bmatrix} x_{B} \ x_{N} \end{bmatrix} = \begin{bmatrix} B^{-1}b \ 0 \end{bmatrix} $$ $$$$ これは基本解です。Bは基行列であり、その成分は基変数です。基本解に負の数が含まれていない場合、それは基本可行解です。例題を通じて理解しやすくなります。

6. サポートベクターマシン

重点章 カーネル関数、関数間隔、幾何間隔、サポートベクター、3つの形式と対偶問題 sklearnを使用してサポートベクターマシンを呼び出す

関数間隔: $\hat \gamma_i = y(wx_i+b)$ 超平面に関するすべてのトレーニングセットの関数間隔は、すべてのサンプル点の関数間隔の最小値です。 幾何間隔: $\gamma = \frac{\hat \gamma_{i}}{\vert \vert w \vert \vert}$

線形可分SVM

image.png image.png

線形SVM

image.png image.png

非線形SVM-カーネル技術

image.png

サポートベクター

image.png

SVMの特性

■利点

  • 汎化能力が優れており、特に小さなサンプルトレーニングセットで他のアルゴリズムよりも優れた結果を得ることができます。これは、その最適化目標が構造リスク最小であり、経験リスク最小ではないため、marginを通じてデータ分布の構造化記述を得ることができ、データ規模とデータ分布の要求を低減します。
  • 強力な数学的理論的支援があり、基本的に確率測度や大数の法則などに関与しません。
  • カーネル関数を導入することで非線形分類問題を解決できます。 ■欠点
  • 多分類問題の解決が不便です。
  • 結果に大きな影響を与える超パラメータが存在します。例えば、rbfカーネル関数を使用する場合、ペナルティ項Cとカーネルパラメータgammaは、全探索または経験的推測によってのみ取得できます。
1
2
3
4
5
6
7
8
9
import numpy as np
from sklearn.svm import SVC

x = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])  # 自変数
y = np.array([1, 1, 2, 2])  # 因変数
model = SVC()  # モデルを定義
model.fit(x, y)  # データに基づいてモデルをトレーニング
pred = model.predict([[-0.8, -1]])  # x=[-0.8,-1]の結果を予測
print(pred)  # y=[1]を出力

7. アンサンブル学習

Adaboostアルゴリズム

入力トレーニングセット$D= {(x_1,y_1),(x_2,y_2),…,(x_m,y_{m})} \quad y={-1,1}$ ,出力最終分類器$H(x)$,具体的なステップは次の通りです:

  1. 弱分類器の数を$T$に設定し、$t=1$とし、均一分布で初期化されたトレーニングセットサンプルの重み分布を使用し、$m$次元ベクトル$D_1$ は最初に更新されるサンプルの重みを表し、$D_1$の初期値を次のように設定します: $$D_{t} = (\frac{1}{m},\frac{1}{m},…,\frac{1}{m})^T $$
  2. 重み分布が$D_t$のトレーニングサンプルセット$D$を使用して第$t$の弱分類器$h_t$を学習
  3. トレーニングサンプルセット$D$上の$h_t$の誤分類率$\epsilon_t$を計算し、$\epsilon_t>0.5$の場合は破棄
  4. 弱学習器$h_t$の組み合わせ重み$\alpha_t$を決定し、誤差率が小さいほど$h_t$の重み$\alpha_t$は大きくなるべきであり、次のように表されます: $$\alpha_t = \frac{1}{2}ln\frac{1-\epsilon_t}{\epsilon_{t}}$$
  5. 弱分類器$h_t$のトレーニングサンプルセットに対する誤分類率$\epsilon_t$に基づいてサンプルの重みを更新: $$D_{t+1}= \frac{D_{t,i}exp(-\alpha_{t} y_{i}h_{t}(x_{i}))}{Z_{t}}$$
  6. $t<T$の場合、$t= t+1$とし、ステップ2に戻ります。そうでない場合はステップ7を実行します。
  7. $T$個の分類器$h_1,h_2,…,h_T$をそれぞれの重み$\alpha_t$に従って組み合わせ、最終分類器を得ます: $$H(x) = sign(\sum_{t=1}^{t}\alpha_{t}h_{t}(x))$$

Baggingアルゴリズムのステップ

image.png

多様性強化の方法

  • データサンプルの摂動 通常はサンプリング法に基づいており、Baggingは自助サンプリングを使用し、AdaBoostはシーケンシャルサンプリングを採用します。

  • 入力属性の摂動 ランダムサブスペース:初期属性セットからいくつかの属性サブセットを抽出し、各属性サブセットに基づいて基学習器をトレーニングします。

  • 出力表現の摂動 出力表現を操作することで多様性を強化できます。 フリップ法:いくつかのトレーニングサンプルのラベルをランダムに変更して出力表現を変換します。 出力調整法:分類出力を回帰出力に変換し、個別の学習器を構築してサブタスクを解決します。 ECOC法:誤り訂正出力コードを利用して多分類タスクを一連の二分類に分解して基学習器をトレーニングします。

  • アルゴリズムパラメータの摂動 異なるパラメータをランダムに設定します。 負の相関法:正則化項を明示的に使用して個別のニューラルネットワークが異なるパラメータを使用するように強制します。

参考

参考ノート一 コード向け

20級真題

一、10点

表示画像には化学のネットワーク環境が必要です

中科院大学院入試の原題、2問で合計10点

二、10点

  1. 留一法とは何ですか?
  2. 以下のデータを使用して、線形モデル$y=wx+b$を使用して留一法で(全体の)平均二乗誤差を計算します。
    x y
    0 2
    1 1
    2 2

(いずれにせよ3組ですが、具体的なデータはこれではないかもしれません)

三、以下が凸関数であるかどうかを判断してください 10点

(1) $ax_{1}^{2} + bx_{2}^{2} + cx_{1}x_{2} +dx_{1} +ex_2$ (2) $ax_{1}^{2} + bx_{2}^{2} + cx_{1}x_{2} +dx_{1} +ex_2$ (どちらもこの形式ですが、具体的な数字は覚えていません)

四、凸集合を証明してください 10点

$p \in C$が与えられ、$C$は$R^p$上の凸集合であるとします。$S = {x \vert x=A\rho ,\rho \in C}$が与えられ、ここで$A$は$n \times p$の行列です。$S$が凸集合であることを証明してください。

五、図解法を使用して線形計画の最小値を求めます。10点

六、極小問題の対偶形式を書いてください。10点

七、 15点

  1. Adaboostアルゴリズムを説明してください
  2. Baggingアルゴリズムを説明してください
  3. 多様性強化の方法を簡単に説明してください

八、 25点 あるニューラルネットワークが与えられ、$d$次元の入力$x = [x_{1},…,x_{d}]$、単一の隠れ層に$p$個の隠れ層ノードがあり、出力層に$l$個のノードがあり、出力は$y = [\hat y_{1}^{k},…,\hat y_{l}^{k}]$です。

  1. 隠れ層の入力と出力層の入力を書いてください
  2. 平均二乗損失関数$E_{k}$を書いてください
  3. 学習率$\eta$が与えられた場合、$\frac{\partial E_{k}}{w_{hj}}$を求めてください(導出過程を示してください)
  4. 逆伝播の疑似コードを示してください
  5. 勾配降下といくつかの一般的な変種を説明し、それらの違いを比較してください
Buy me a coffee~
Tim 支付宝支付宝
Tim 贝宝贝宝
Tim 微信微信
0%