NG 逻辑回归_二分类

来源:互联网 发布:收集5条红酒网络广告语 编辑:程序博客网 时间:2024/06/01 21:33
import timeimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltA = pd.read_table('01.txt',header=None,usecols = (0,1,2))# 插入一列 1A.insert(0,'insert',1)# 规划一 特征值调整到 0-1# A.iloc[:,1]=(A.iloc[:,1]-A.iloc[:,1].mean() )/(A.iloc[:,1].max()-A.iloc[:,1].min())# A.iloc[:,2]=(A.iloc[:,2]-A.iloc[:,2].mean() )/(A.iloc[:,2].max()-A.iloc[:,2].min())X = np.mat(A.iloc[:,:3])y = np.mat(A.iloc[:,3]).Tm,n = X.shape# 初始参数params = np.mat([1.0,1.0,1.0]).Talpha = 0.001 #学习率times = 1000 #迭代次数# sigmoid 函数def sigmoid(inX):return 1.0/(1+np.exp(-inX))J = []# 迭代参数 梯度下降for i in range(times):error_col = sigmoid(X*params) - yparams[0] = params[0] - alpha*sum( error_col )params[1] = params[1] - alpha*sum(np.multiply(error_col,X[:,1]))params[2] = params[2] - alpha*sum(np.multiply(error_col,X[:,2]))J.append(sum( np.multiply(error_col,error_col) )[0,0] )print(params)# 可视化# 收敛图像x1 = range(0,times,1) # 起始值 终止值 步长plt.subplot(121),plt.plot(x1,J,'r--'),plt.title('J - Itera'),plt.xlabel('Itera Times'),plt.ylabel(' J ')# 拟合函数图像x2=np.linspace(-4,4,50) #开始值 终止值 元素个数plt.subplot(122),plt.plot(A[A.iloc[:,3]==1].iloc[:,1],A[A.iloc[:,3]==1].iloc[:,2],'b*'),plt.plot(A[A.iloc[:,3]==0].iloc[:,1],A[A.iloc[:,3]==0].iloc[:,2],'ro'),plt.plot(x2,params[0,0]+params[1,0]*x2+params[2,0]*x2,'g--')plt.show()