""" 函数说明:梯度上升算法 Parameters: dataMatrix - 数据数组 classLabels - 数据标签 alpha - 学习率 n - 最大迭代次数 Returns: weights - 求得的回归系数数组(最优参数) """ def stocGradAscent(dataMatrix, classLabels, alpha = 0.001, n = 150): #### Start Code Here #### #返回dataMatrix的大小。m为行数,n为列数 #参数初始化weights #随机梯度, 循环150,观察是否收敛 for j in range(numIter): dataIndex = list(range(m)) for i in range(m): # i和j的不断增大,导致alpha的值不断减少,但是不为0 alpha = 4 / (1.0 + j + i) + 0.0001 # 随机产生一个 0~len()之间的一个值 # random.uniform(x, y) 方法将随机生成下一个实数,它在[x,y]范围内,x是这个范围内的最小值,y是这个范围内的最大值。 # sum(dataMatrix[i]*weights)为了求 f(x)的值, f(x)=a1*x1+b2*x2+..+nn*xn #真实值和预测值之间的误差 #更新回归系数 #删除已经使用的样本 del(dataIndex[randIndex]) return weights 完成代码
时间: 2023-11-22 13:53:26 浏览: 70
以下是梯度上升算法的随机梯度实现代码:
```
import random
import numpy as np
def stocGradAscent(dataMatrix, classLabels, alpha=0.01, n=150):
m, n = np.shape(dataMatrix)
weights = np.ones(n)
for j in range(n):
dataIndex = list(range(m))
for i in range(m):
alpha = 4 / (1.0 + j + i) + 0.0001
randIndex = int(random.uniform(0, len(dataIndex)))
h = sigmoid(sum(dataMatrix[randIndex] * weights))
error = classLabels[randIndex] - h
weights = weights + alpha * error * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weights
```
其中,`sigmoid()`函数为:
```
def sigmoid(x):
return 1.0 / (1 + np.exp(-x))
```
该函数用于计算sigmoid函数的值,用于分类问题中的预测。
阅读全文