import numpy as np import matplotlib.pyplot as plt # 读入训练数据 train = np.loadtxt('images2.csv',delimiter=',',skiprows=1) train_x = train[:,0:2] train_y = train[:,2] #初始化参数 theta = np.random.rand(4) #标准化 mu = train_x.mean(axis=0) sigma = train_x.std(axis=0) def standardize(x): return (x-mu)/sigma train_z=standardize(train_x) #增加x0和x3,形成X矩阵,方便后续计算,现在只有x1,x2, def to_matrix(x): x0 = np.ones([x.shape[0],1]) x3 =x[:,0,np.newaxis]**2 return np.hstack([x0,x,x3]) X = to_matrix(train_z) #sigmord函数 def f(x): return 1/(1+np.exp(-np.dot(x,theta))) def classify(x): return (f(x) >= 0.5).astype(np.int64) #精度的历史记录 accuracies=[] #参数更新过程 ETA=1e-3 epoch=5000 for i in range(epoch): theta=theta-ETA*np.dot(f(X)-train_y,X) result = classify(X)== train_y accuracy = len(result[result == True])/len(result) accuracies.append(accuracy) x1= np.linspace(-2,2,100) x2= -(theta[0]+theta[1]*x1+theta[3]*x1**2)/theta[2] plt.plot(train_z[train_y == 1,0], train_z[train_y == 1,1],'o') plt.plot(train_z[train_y == 0,0], train_z[train_y == 0,1],'x') plt.plot(x1, x2,linestyle = 'dashed') plt.show() x= np.arange(len(accuracies)) plt.plot(accuracies) plt.show()
白话机器学习的数学--二分类(逻辑回归)
最新推荐文章于 2024-10-03 18:12:52 发布