NG 逻辑回归_二分类

import time
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

A = pd.read_table('01.txt',header=None,usecols = (0,1,2))
# 插入一列 1
A.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]).T

m,n = X.shape

# 初始参数
params = np.mat([1.0,1.0,1.0]).T

alpha = 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) - y
	params[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()





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值