-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path分类问题与Sigmoid函数.py
52 lines (52 loc) · 2.21 KB
/
分类问题与Sigmoid函数.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import numpy as np
'''
Parameters:
无
Returns:
dataMat - 数据列表
labelMat - 标签列表
'''
# 函数说明:加载数据
def loadDataSet():
dataMat = [] #创建数据列表
labelMat = [] #创建标签列表
fr = open('./机器学习第5章/testSet.txt') #打开文件
for line in fr.readlines(): #逐行读取
lineArr = line.strip().split() #去回车,放入列表
dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])]) #添加数据
labelMat.append(int(lineArr[2])) #添加标签
fr.close() #关闭文件
return dataMat, labelMat #返回
'''
Parameters:
inX - 数据
Returns:
sigmoid函数
'''
# 函数说明:sigmoid函数
def sigmoid(inX):
return 1.0/(1+np.exp(-inX))
'''
Parameters:
dataMatIn - 数据集
classLabels - 数据标签
Returns:
'''
# 函数说明:梯度上升算法
def gradAscent(dataMatIn, classLabels):
dataMatrix = np.mat(dataMatIn) #转换成numpy的mat
labelMat = np.mat(classLabels).transpose() #转换成numpy的mat,并进行转置
m, n = np.shape(dataMatrix) #返回dataMatrix的大小。m为行数,n为列数。
alpha = 0.001 #移动步长,也就是学习速率,控制更新的幅度。
maxCycles = 500 #最大迭代次数
weights = np.ones((n,1))
##########
for k in range(maxCycles):
h=sigmoid(np.dot(dataMatrix,weights))
error=(labelMat-h)
weights=weights+alpha*dataMatrix.transpose()*error
##########
return weights.getA() #将矩阵转换为数组,返回权重数组
if __name__ == '__main__':
dataMat, labelMat = loadDataSet()
print(gradAscent(dataMat, labelMat))