간단한 통찰력의 기계 학습으로 입문

6686 단어 기계 학습Python

1. 간단한 통찰력이란


아래의 선형 식별 함수를 사용하여 입력한 데이터를 두 종류로 분류한다.
f(x)=g(w^{T}x+\theta)\\
ここで、\theta = x_0とおくと、  \\
    =g(\sum _{i=0}^{d}w_ix_i)
非線形活性化関数:g(a) = \left\{
\begin{array}{ll}
+1 & (a \geq 0) \\
-1 & (a \lt 0)
\end{array}
\right.
重み:w=(w_0,w_1,...,w_{d})、 \\
入力データ:x=(x_0=\theta,x_1,x_2,...,x_{d})、
\\d:次元数、
バイアス:\theta(任意の数値)
f(x) \geq 0 のとき、x\in C_{1}
f(x) \lt 0 のとき、x\in C_{2}
C_1:クラス1、C_2:クラス2
상기 과정에서 권중 w를 확정하는 데 사용되는 매개 변수의 처리를'학습'이라고 한다.
편차θ(편압 매개 변수)는 기본적으로 사용할 수 없는 것도 아니지만 더 좋은 결과를 얻기 위해 사람의 손으로 조정(조정)한다.
이런 편압은 일반적으로 매개 변수(초매개 변수 또는 조정 매개 변수)라고 불리고, 조정 매개 변수도 매개 변수 조정이라고 부른다.
~ 매개 변수의 용례~
간단한 통찰력으로 매개 변수를 조절한 결과 그에 상응하는 결과를 얻었다.
또 조화 방법은 다양한 존재로 수동으로 시도하는 방법, 격자 검색, 무작위 샘플링 등이 있다.

1.1.무슨 일에 쓸 수 있습니까?


두 가지 문제 중 선형적으로 분리된 문제에 쓸 수 있다.
선형으로 분리할 수 있는 문제는 대체적으로 2차원 상황에서 하나의 직선으로 클래스 1의 집합과 클래스 2의 집합을 분리할 수 있는 문제를 가리킨다.
일반적으로 n차원 공간에서의 클래스 1의 집합과 클래스 2의 집합을 n-1차원의 초평면에서 분리할 수 있는데 이것도 선형 분리라고 부른다.
그림은 선형 분리와 선형 분리가 가능한 예시를 보여 준다.

스팸메일의 확정은 흔히 교사와 학습 알고리즘의 구체적인 응용 예로 들린다. 예를 들어 통찰가속기 등이다.
대체로 다음 절차에 따라 스팸메일 판정을 한다.
 1.스팸메일과 일반 메일 두 종류를 가정해 보세요.
 2.이어 두 메일에서 특징 벡터(or 특징 or 내력)와 교사 라벨(스팸메일 또는 정상 라벨)을 만든다.
※ 주제 밖의 말, 자연 언어 처리 영역에서는 소성이라는 호칭이 자주 사용된다.
 3.특징 벡터와 교사 라벨을 학습기(이번에는 단순한 통찰력)에 입력하여 학습한다.
 4.완성된 수리 모델(이번은 선형 식별 함수 모델)을 사용하여 판정한다.
특징 벡터는 정성 데이터에서 교묘하게 데이터 특징을 보존하고 양적화해야 한다.
이것에 따라 정밀도는 매우 큰 변화가 있어서 매우 중요한 일이다.
특징 벡터의 제작 방법의 구체적인 예는 다음과 같다.
【예:특징 벡터 제작 방법】
다음 데이터가 있다고 가정하면 스팸메일인지 주제로 판단하세요.
• 스팸메일 주제: 남자친구와 오리퀴가 싸우다 죽었다
・ 일반 우편물의 주제: 상담 시간 변경 요청
자연 언어 처리 분야에서 자주 사용하는 기술은 형태소 분석이라는 기술이 있다.
형태소 해석을 하는 도구로 메카브와 카보차 등이 유명하다.
형태소 분석을 통해 입력된 문장을 형태소(언어에서 의미가 있는 최소 단위)로 나눌 수 있다.
이렇게 되면 다음 문장이 완성된다.(국어를 못하는 사람이 하는 형태소 해석이라 정밀도가 보장되지 않는다)
・스팸메일 테마: 남자친구/와/아리아쿠/전투/사망/사망
・일반 우편물의 주제: 상담/시간/변경/의뢰/
이어 상기 데이터로 형태소 사전을 제작한다.
결과 사전은 다음과 같습니다.
    辞書 \in\{彼氏,が,オオアリクイ,と,戦って,死んで,しまいました,打ち合わせ,時間,変更,の,依頼\}
※ 위에서 언급한 것은 자연언어처리 영역에서 누군가가 만든 사전의 데이터를 사용하거나 수작업으로 입력한 것이기 때문에 일반적인 방법이 아닙니다.
이 사전을 작성할 때 모든 형태소를 동사의 기본 형태로 바꾸고 이를 사전에 넣어 정밀도를 높여야 한다.
마지막으로 생성한 사전을 사용하여 다음과 같이 피쳐 벡터를 생성합니다.
スパムメールの特徴ベクトルx_1=\{1,1,1,1,1,1,1,0,0,0,0,0\},教師ラベルt=\{-1\}
通常のメールの特徴ベクトルx_2=\{0,0,0,0,0,0,0,1,1,1,1,1 \},教師ラベルt=\{+1\}
특징 벡터를 어떻게 생성하는지 말하려면 사전에 포함된 단어의 출현 유무(1:유, 0:무)를 배열에 저장한다.
이 방법은 Bag-Of-Words법(단어 봉지법)이라고 불린다.
단어가 나오는 유무가 아닌 단어가 나오는 횟수에 따라 만들어지는 경우도 있다.
또한 이 확장자로서 Tf-idf와 같은 가중 방법도 존재한다.
이는 많은 문서에 등장하는 단어의 중요성을 낮추고 특정 문서에만 등장하는 단어의 중요성을 높이기 위해 사용된다.
또 교사 태그가 결정되지만 일반적으로 확률모델에서 사용되는 경우 0과 1, 통찰가속기와 같은 활성화 함수와 일치하는 -1과 1을 적용한다.
이상은 특징 벡터의 제작 절차입니다.
또'가속기의 수렴정리를 통찰한다'는 말로 선형 분리 문제에 활용할 수 있는 근거를 설명할 수 있다.
다음은 인증서입니다.
http://ocw.nagoya-u.jp/files/253/haifu%2804-4%29.pdf

2. 추진기 학습(확률 최대 부상 알고리즘)


학습 방법의 개념은 매우 간단하다. 만약에 틀리면 후술한 공식에 따라 w의 값을 갱신하고 오류가 제거될 때까지 계속 갱신한다.
학습 데이터의 서열 정의는 다음과 같다.
X=\{X_1,X_2,...,X_M\} \\
M:データ数
여기에 잘못 분류된 학습 데이터의 집합은 다음과 같다.
X_n=\{x_1,x_2,...,x_n\}
클래스 1의 데이터에 대해 f(x)≥0, 클래스 2의 데이터에 대해 f(x)≥0이 되는 권중 w를 구합니다.
이러한 상황에서 교사 탭 t={+1,-1}을 사용할 때 모든 데이터는 다음과 같은 내용을 만족시킨다.
w^Tx_it_i>0
정확한 분류 데이터에 대해서는 다음과 같은 오차 함수 E(·)를 고려해 오차 0을 할당할 수 있다.
E(w) =-\sum_{n \in X} w^Tx_nt_n
w의 값을 설정하면 최소화할 수 있도록 잘 분류할 수 있습니다.
이를 최소화하는 방법으로 확률 계단 하강법을 이용한다.
확률 계단 하강법은 오차 함수가 이번 E(w)와 같이 데이터 점의 합으로 구성된 상황에서 데이터 n을 제시할 때 아래의 계산을 통해 w를 업데이트한다.
w^{(r+1)}=w^{(r)}-\mu \nabla E_n \\
r:繰り返しの回数、\mu:学習率パラメータ \\
w^{(r)}:r回更新した後の重みw
위에서 설명한 대로 다음과 같은 업데이트식을 내보낼 수 있습니다.
w^{(r+1)}=w^{(r)}-\mu \nabla E(w) \\
=w^{(r)}+\mu x_nt_n 
w의 값에 따라 데이터가 잘못 분류된 구역에서 t의 값이 +1이든 -1이든 잘못 분류된 데이터가 오차 E(w)에 기여하는 것은 선형 함수이다.
또한 w의 값에 따라 데이터가 정확하게 분류된 구역 내에서 데이터가 오차 E(w)에 기여하는 것은 0이다.
따라서 E(w)는 선형 함수입니다.
따라서 E(w)의 사다리는 다음과 같이 계산됩니다.
E(w) = \frac{\partial E(w)}{\partial w} \\
=x_nt_n 

3. 파이톤을 통해 실현


다음 코드는 디자인과 나쁘지 않은 AND 연산을 통찰력으로 풀면 되는 코드입니다.
공부하는 모습이 그려졌다.
원래 반이나 방법의 느낌이 들 수 있으니 양해해 주세요.
기분 좋으면 다시 쓸게요.
실행하려면 numby와 matplotlib의 프로그램 라이브러리를 설치해야 합니다.
# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

# 非活性化関数g(x)のメソッド
def predict(w,x):
  out = np.dot(w,x)
  if out >= 0:
    o = 1.0
  else:
    o = -1.0
  return o

# プロットするメソッド
def plot(wvec,x1,x2):
  x_fig=np.arange(-2,5,0.1)
  fig = plt.figure(figsize=(8, 8),dpi=100)
  ims = []
  plt.xlim(-1,2.5)
  plt.ylim(-1,2.5)
  # プロットする
  for w in wvec:
    y_fig = [-(w[0] / w[1]) * xi - (w[2] / w[1]) for xi in x_fig]
    plt.scatter(x1[:,0],x1[:,1],marker='o',color='g',s=100)
    plt.scatter(x2[:,0],x2[:,1],marker='s',color='b',s=100)
    ims.append(plt.plot(x_fig,y_fig,"r"))
  for i in range(10):
    ims.append(plt.plot(x_fig,y_fig,"r"))
  ani = animation.ArtistAnimation(fig, ims, interval=1000)
  plt.show()

if __name__=='__main__':
  wvec=[np.array([1.0,0.5,0.8])]# 重みベクトルの初期値、適当
  mu = 0.3 # 学習係数
  sita = 1 # バイアス成分

  # AND関数のデータ(一番後ろの列はバイアス成分:1)
  x1=np.array([[0,0],[0,1],[1,0]]) #クラス1(演算結果が0)の行列生成
  x2=np.array([[1,1]]) # クラス2(演算結果が1)の行列生成
  bias = np.array([sita for i in range(len(x1))])
  x1 = np.c_[x1,bias] #バイアスをクラス1のデータ最後尾に連結
  bias = np.array([sita for i in range(len(x2))])
  x2 = np.c_[x2,bias] #バイアスをクラス2のデータ最後尾に連結
  class_x = np.r_[x1,x2] # 行列の連結

  t = [-1,-1,-1,1] # AND関数のラベル
  # o:出力を求める
  o=[]
  while t != o:
    o = [] # 初期化
    # 学習フェーズ
    for i in range(class_x.shape[0]):
      out = predict(wvec[-1], class_x[i,:])
      o.append(out)
      if t[i]*out<0: #出力と教師ラベルが異なるとき
        wvectmp = mu*class_x[i,:]*t[i] #wを変化させる量
        wvec.append(wvec[-1] + wvectmp) #重みの更新
  plot(wvec,x1,x2)

4. 단순한 통찰력을 확장하는 대표적인 알고리즘


・SVM
다층수체

5. 참고 문헌


패턴 식별과 기계 학습에 있어
1차 모드 식별

좋은 웹페이지 즐겨찾기