赞
踩
目录
首先我们要先介绍一下Sigmoid函数,也称为逻辑函数(Logistic function):
图像:
函数特点: 从上图可以看到sigmoid函数是一个s形的曲线,自变量取值范围是R,值域在[0, 1]之间,在远离0的地方函数的值会很快接近0或者1。它的这个特性对于解决二分类问题十分重要。
直线Z=WX ,此直线也称为决策边界,对应于Z=0,以及概率为0.5,在此直线上的点的概率大于0.5,在此直线下的点的概率小于0.5,所以X是固定的,我们要改变W的值,从而改变Z的方向使得每个点到Z的cost值最小。
求最优的决策边界,即求最优的线
直线方程:Z=WX
预测函数H(X):
cost函数:
cost函数对w求偏导:
- import numpy as np
- import matplotlib.pyplot as plt
-
- def loaddate(filename):
- """
- 加载文件导入数据和标签
- """
- file = open(filename)
- x=[]
- y=[]
- for line in file.readlines():
- line = line.strip().split()
- x.append([1,float(line[0]),float(line[1])])
- y.append(float(line[-1]))
- xmat = np.mat(x)
- ymat = np.mat(y).T
-
- file.close()
- return xmat,ymat
-
- def w_calc(xmat,ymat,alpha=0.001, maxiter = 10000):
- """
- 梯度下降更新w
- """
- # w init
- w = np.mat(np.random.randn(3,1))
- # w update
- for i in range(maxiter):
- H = 1/(1+np.exp(-xmat*w)) # 预测值
- dw = np.dot(xmat.T,H-ymat) # cost对w的导数
- w -= alpha*dw # 更新w
- return w
-
-
-
-
-
- xmat,ymat = loaddate('DATA.txt')
- #print('xmat:',xmat,xmat.shape)
- #print('ymat:',ymat,ymat.shape)
- W = w_calc(xmat,ymat)
- print(W)
- # 画出散点图
- plt.scatter(xmat[:,1][ymat==0].A,xmat[:,2][ymat==0].A,marker = '^',s=150,label = 'label=0')
- plt.scatter(xmat[:,1][ymat==1].A,xmat[:,2][ymat==1].A,s=150,label = 'label=1')
-
-
- # 画出z
- w0 = W[0, 0]
- w1 = W[1, 0]
- w2 = W[2, 0]
- plotx1 = np.arange(1,7,0.01)
- plotx2 = -w0/w2-w1/w2*plotx1
- plt.plot(plotx1,plotx2,c='r',label='decision_boundary')
- plt.grid()
- plt.legend()
- plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。