Deep Learning: Logistic Regression
Logistic Regression
バイナリ分類(バイナリ分類:0または1)の単純モデル(単純ニューラルネットワーク)
Sigmoid関数
前述のLinear Regressionとの最大の違いは、sigmoid関数が0と1の間の値を返すことです.△したがって、バイナリ分類の問題に適している.非
Cost function
Logistic Regressionでは、Loss関数で2元CrossEnropy!上記の式でyが1であれば,直接0を代入する場合,すぐに理解できる.
Gradient Descent
次は、Gradient Depentのモデルパラメータの微分値を求めるプロセスです.以前のLinear Regressionの場合と同様にChainルールを使用します.違いはsigmoid関数の微分程度!(手前にあるので我慢!)
Implement
今、学んだ知識を生かしてAND Operatorを実施しましょう.△AND、ORなどは実現できるが、XORは実現できない.線形に分離できないからだ.
まずデータを準備します.
import numpy as np
import matplotlib.pyplot as plt
import random
from math import exp, log
X = [(0,0), (1,0), (0,1), (1,1)]
Y = [0,0,0,1]
train_loss_list = []
次はLogistic Regressionモデルです.class AND_operator():
def __init__(self):
self.w = np.random.random(size=2)
self.b = np.random.random(size=1)
def sigmoid(self, z):
return 1/(1+exp(-z))
def predict(self, x):
z = np.inner(self.w, x)+self.b
a = self.sigmoid(z)
return a
データとモデルを用いて学習するコード.def train(X, Y, model, lr=0.1):
dw0 = 0.0
dw1 = 0.0
db = 0.0
m = len(X)
cost = 0.0
for x,y in zip(X, Y):
a = model.predict(x)
if y==1:
cost-=log(a)
else:
cost-=log(1-a)
dw0+=(a-y)*x[0]
dw1+=(a-y)*x[1]
db+=(a-y)
cost/=m
train_loss_list.append(cost)
model.w[0]-=lr*dw0/m
model.w[1]-=lr*dw1/m
model.b-=lr*db/m
return cost
これは学習を行い,失われた変化の部分をグラフで描く.for epoch in range(10000):
cost = train(X, Y, model, 0.01)
if epoch%100==0:
print(epoch, cost)
plt.figure()
plt.title("train loss")
x1 = np.arange(0, len(train_loss_list))
plt.plot(x1, train_loss_list)
成績が落ちて、よく勉強しているのが見えます.Reference
この問題について(Deep Learning: Logistic Regression), 我々は、より多くの情報をここで見つけました https://velog.io/@danbibibi/Deep-Learning-Logistic-Regressionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol