[ 参照リンク:Pythonのロジックゲート](https://www.imangodoc.com/221.html)
Pythonの基礎となる論理アルゴリズム:回帰:回帰は統計の重要な概念であり、その本来の目的は、以前のデータに基づいて正確な出力値を予測することです。ロジスティック回帰は、「機械学習」コースの3番目のアルゴリズムであり、現在、分類の問題を解決するために最も広く使用されている学習アルゴリズムです。線形回帰アルゴリズムと同様に、これも監視対象の学習アルゴリズムです。例:ニュース分類、遺伝子配列、市場分割などは、ロジスティック回帰を使用して、特性に従って分割されます。最終的な予測結果の出力は、ポジティブクラス(1)、ネガティブクラス(0)です。
ロジスティック回帰モデルは「S」字型の関数です。
コスト関数:コスト関数-エラーの2乗の合計-非凸関数-ローカル最小点。勾配降下
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
train_data=np.loadtxt(r'LoR_linear.txt',delimiter=',')
test_data=np.loadtxt(r'LoR_nonlinear.txt',delimiter=',')
train_X,train_y=train_data[:,:-1],train_data[:,-1]
test_X,test_y=test_data[:,:-1],test_data[:,-1]
def preProess(X,y):
#機能ズーム
X -=np.mean(X,axis=0)
X /=np.std(X,axis=0,ddof=1)
X=np.c_[np.ones(len(X)),X]
y=np.c_[y]
return X,y
train_X,train_y=preProess(train_X,train_y)
test_X,test_y=preProess(test_X,test_y)
def g(x):
return 1/(1+np.exp(-x))
x=np.linspace(-10,10,500)
y=g(x)
plt.plot(x,y)
plt.show()
def model(X,theta):
z=np.dot(X,theta)
h=g(z)
return h
def costFunc(h,y):
m=len(y)
J=-(1.0/m)np.sum(ynp.log(h)+(1-y)*np.log(1-h))
return J
def gradDesc(X,y,max_iter=15000,alpha=0.1):
m,n=X.shape
theta=np.zeros((n,1))
J_history=np.zeros(max_iter)
for i in range(max_iter):
h=model(X,theta)
J_history[i]=costFunc(h,y)
deltaTheta = (1.0/m)*np.dot(X.T,h-y)
theta -= deltaTheta*alpha
return J_history,theta
def score(h,y):
m=len(y)
count=0
for i in range(m):
h[i]=np.where(h[i]>=0.5,1,0)
if h[i]==y[i]:
count+=1
return count/m
def predict(h):
y_pre=[1 if i>=0.5 else 0 for i in h]
return y_pre
print(train_X.shape,train_y.shape)
J_history,theta=gradDesc(train_X,train_y)
print(theta)
plt.title( "コスト関数")
plt.plot(J_history)
plt.show()
train_h=model(train_X,theta)
test_h=model(test_X,theta)
print(train_h,test_h)
def showDivide(X,theta,y,title):
plt.title(title)
plt.scatter(X [y [:、0] == 0,1]、X [y [:、0] == 0,2]、label = "negative sample")
plt.scatter(X [y [:、0] == 1,1]、X [y [:、0] == 1,2]、label = "ポジティブサンプル")
min_x1,max_x1=np.min(X),np.max(X)
min_x2,max_x2=-(theta[0]+theta[1]*min_x1)/theta[2],-(theta[0]+theta[1]*max_x1)/theta[2]
plt.plot([min_x1,max_x1],[min_x2,max_x2])
plt.legend()
plt.show()
showDivide(train_X、theta、train_y、 'トレーニングセット')
showDivide(test_X、theta、test_y、 'テストセットセット')
train_y1=predict(train_h)
print( '予測結果は次のとおりです:'、train_y1)
Recommended Posts