from sklearn import datasets
import numpy as np
from sklearn.model_selection import train_test_split
iris_datas = datasets.load_iris()
X = iris_datas.data
y = iris_datas.target
X = X/8 *0.999+0.001
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)
ones = np.identity(3)
for i in range(ones.shape[0]):
for j in range(ones.shape[1]):
if(ones[i,j]==1):
ones[i,j]=0.999
else:
ones[i,j]=0.001
y_true = ones[y_train]
def sigmoid(x):
return 1/(1+np.exp(-x))
def accuasy(y_test,rs):
return sum(y_test == rs)/len(y_test)
W1 = np.random.normal(0.0,1,(4,10))
W2 = np.random.normal(0.0,1,(10,3))
learn_rate = 0.001
for i in range(10000):
y1 = np.dot(X_train,W1)
y1_ = sigmoid(y1)
y2 = np.dot(y1_,W2)
y2_ = sigmoid(y2)
error = 1/2*(y_true-y2_)**2
error_ = y2_-y_true
h_error = np.dot(error_,W2.T)
W2_ = np.dot(y1_.T,error_*y2_*(1-y2_))
W1_ = np.dot(X_train.T,h_error*y1_*(1-y1_))
W2 -=W2_ *learn_rate
W1 -=W1_ *learn_rate
o1 = np.dot(X_test,W1)
a1 = sigmoid(o1)
o2 = np.dot(a1,W2)
a2 = sigmoid(o2)
a=np.argmax(a2,axis = 1)
print(accuasy(y_test,a))
结果为:0.9333333333333333