逻辑回归问题

本文介绍了逻辑回归的基本概念,通过添加sigmoid函数将线性回归转换为分类问题,并详细解释了如何利用Python实现逻辑回归算法。此外,还展示了完整的代码实例及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

回归问题通过线性回归已经得到了粗略的认识,接下来通过线性回归后面加一个 sigmoid 函数,即将输出限制到(0,1),那么我们就可以通过判断输出的来进行分类,认为 output >0.5 和 output<0.5归为两个不同的类别,可以看出逻辑回归只能解决的二分类问题。

下面从统计概率的角度去学习逻辑回归问题:

 

上面通过最大化似然函数得到了 参数 theta

下面看一下程序:(python)

import numpy as np
import matplotlib.pyplot as plt

class LogisticRegression(object):
	def __init__(self,data,label,alpha): # data is two dim   label  is  one dim   alpha is learning rate
		self.theta = 10*np.random.random((1,3))
		self.label = label
		self.x = np.vstack((np.ones((1,data.shape[1]) ) ,data) )
		self.alpha = alpha
	def hypothesis(self):
		return 1/(1+np.exp((-1)*self.theta.dot(self.x))) 
		
	def learn(self):
		count =0
		while count <1000:
			count+=1
			h= self.hypothesis()
			secondTerm = self.alpha*np.sum((h-self.label )*self.x,axis =1)
			self.theta = self.theta -secondTerm
		print self.hypothesis()

if __name__ == "__main__":
	trainData =np.array([[1,1,2,4,5,5],[1,2,1,5,5,4]])#construct train data and label
	trainLabel= np.array([1,1,1,0,0,0])
	
	logisticRegression = LogisticRegression(trainData,trainLabel,0.01)
	
	logisticRegression.learn() #learn algorithm
	
	theta = logisticRegression.theta
	print theta  #print after learn 
	
	testData = np.arange(0,9,0.1)
	testData_c= np.vstack((np.ones((1,testData.size) ) ,testData) )
	testResult =theta[0,0:2].dot(testData_c)/theta[0,2]*(-1)  #construct test data and test result
	
	#draw the result
	plt.plot(testData,testResult)
	plt.plot(trainData[0,0:3],trainData[1,0:3],'r^')
	plt.plot(trainData[0,3:],trainData[1,3:],'o')
	plt.axis([0,10,0,10])
	plt.show()

以上是程序部分 ,结果图如下:


要实现逻辑回归问题的正则化代码,可以参考引用中提供的代码段。下面是一个示例: ``` # 实现正则化的代价函数 def costReg(theta, X, y, learningRate): theta = np.matrix(theta) X = np.matrix(X) y = np.matrix(y) first = np.multiply(-y, np.log(sigmoid(X * theta.T))) second = np.multiply((1 - y), np.log(1 - sigmoid(X * theta.T))) reg = (learningRate / (2 * len(X))) * np.sum(np.power(theta[:,1:theta.shape = np.sum(term) / len(X) else: grad[i = (np.sum(term) / len(X)) + ((learningRate / len(X)) * theta[:,i]) return grad ``` 这段代码实现了使用正则化的逻辑回归的代价函数和梯度函数。代价函数计算了损失函数,并加上了正则化项,用于减少特征的影响,避免过拟合。梯度函数计算了每个参数的梯度,同样也考虑了正则化项。这些函数可以用于训练逻辑回归模型并进行预测。 请注意,这里的sigmoid函数是在代码段中提供的,用于将预测值进行非线性的变化。 : 逻辑回归:适用于解决分类问题,区别于线性回归:线性回归用于解决预测性的问题,都是连续性的值,而逻辑回归则需要将数据进行分类。正则化:为了解决过拟合的问题。过拟合是指模型在训练集上表现良好,但在测试集上表现较差的现象。正则化通过对一些特征引入惩罚项来减小这些特征的影响,从而防止过拟合的发生。 : 这段代码实现了逻辑回归问题的正则化代码。`costReg`函数计算了带有正则化项的代价函数,`gradientReg`函数计算了带有正则化项的梯度函数。这些函数可以用于训练逻辑回归模型,并通过调用`sigmoid`函数进行预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值