激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 機器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解

機器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解

2020-12-28 00:18moodytong Python

這篇文章主要介紹了機器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解,具有一定借鑒價值,需要的朋友可以參考下。

一、算法簡要

我們希望有這么一種函數(shù):接受輸入然后預(yù)測出類別,這樣用于分類。這里,用到了數(shù)學(xué)中的sigmoid函數(shù),sigmoid函數(shù)的具體表達式和函數(shù)圖象如下:

機器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解

可以較為清楚的看到,當(dāng)輸入的x小于0時,函數(shù)值<0.5,將分類預(yù)測為0;當(dāng)輸入的x大于0時,函數(shù)值>0.5,將分類預(yù)測為1。

1.1 預(yù)測函數(shù)的表示

機器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解

1.2參數(shù)的求解

機器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解

二、代碼實現(xiàn)

函數(shù)sigmoid計算相應(yīng)的函數(shù)值;gradAscent實現(xiàn)的batch-梯度上升,意思就是在每次迭代中所有數(shù)據(jù)集都考慮到了;而stoGradAscent0中,則是將數(shù)據(jù)集中的示例都比那里了一遍,復(fù)雜度大大降低;stoGradAscent1則是對隨機梯度上升的改進,具體變化是alpha每次變化的頻率是變化的,而且每次更新參數(shù)用到的示例都是隨機選取的。

?
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
from numpy import *
import matplotlib.pyplot as plt
def loadDataSet():
  dataMat = []
  labelMat = []
  fr = open('testSet.txt')
  for line in fr.readlines():
    lineArr = line.strip('\n').split('\t')
    dataMat.append([1.0, float(lineArr[0]), float(lineArr[1])])
    labelMat.append(int(lineArr[2]))
  fr.close()
  return dataMat, labelMat
def sigmoid(inX):
  return 1.0/(1+exp(-inX))
def gradAscent(dataMatIn, classLabels):
  dataMatrix = mat(dataMatIn)
  labelMat = mat(classLabels).transpose()
  m,n=shape(dataMatrix)
  alpha = 0.001
  maxCycles = 500
  weights = ones((n,1))
  errors=[]
  for k in range(maxCycles):
    h = sigmoid(dataMatrix*weights)
    error = labelMat - h
    errors.append(sum(error))
    weights = weights + alpha*dataMatrix.transpose()*error
  return weights, errors
def stoGradAscent0(dataMatIn, classLabels):
  m,n=shape(dataMatIn)
  alpha = 0.01
  weights = ones(n)
  for i in range(m):
    h = sigmoid(sum(dataMatIn[i]*weights))
    error = classLabels[i] -
    weights = weights + alpha*error*dataMatIn[i]
  return weights
def stoGradAscent1(dataMatrix, classLabels, numIter = 150):
  m,n=shape(dataMatrix)
  weights = ones(n)
  for j in range(numIter):
    dataIndex=range(m)
    for i in range(m):
      alpha= 4/(1.0+j+i)+0.01
      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
def plotError(errs):
  k = len(errs)
  x = range(1,k+1)
  plt.plot(x,errs,'g--')
  plt.show()
def plotBestFit(wei):
  weights = wei.getA()
  dataMat, labelMat = loadDataSet()
  dataArr = array(dataMat)
  n = shape(dataArr)[0]
  xcord1=[]
  ycord1=[]
  xcord2=[]
  ycord2=[]
  for i in range(n): 
    if int(labelMat[i])==1:
      xcord1.append(dataArr[i,1])
      ycord1.append(dataArr[i,2])
    else:
      xcord2.append(dataArr[i,1])
      ycord2.append(dataArr[i,2])
  fig = plt.figure()
  ax = fig.add_subplot(111)
  ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')
  ax.scatter(xcord2, ycord2, s=30, c='green')
  x = arange(-3.0,3.0,0.1)
  y=(-weights[0]-weights[1]*x)/weights[2]
  ax.plot(x,y)
  plt.xlabel('x1')
  plt.ylabel('x2')
  plt.show()
def classifyVector(inX, weights):
  prob = sigmoid(sum(inX*weights))
  if prob>0.5:
    return 1.0
  else:
    return 0
def colicTest(ftr, fte, numIter):
  frTrain = open(ftr)
  frTest = open(fte)
  trainingSet=[]
  trainingLabels=[]
  for line in frTrain.readlines():
    currLine = line.strip('\n').split('\t')
    lineArr=[]
    for i in range(21):
      lineArr.append(float(currLine[i]))
    trainingSet.append(lineArr)
    trainingLabels.append(float(currLine[21]))
  frTrain.close()
  trainWeights = stoGradAscent1(array(trainingSet),trainingLabels, numIter)
  errorCount = 0
  numTestVec = 0.0
  for line in frTest.readlines():
    numTestVec += 1.0
    currLine = line.strip('\n').split('\t')
    lineArr=[]
    for i in range(21):
      lineArr.append(float(currLine[i]))
    if int(classifyVector(array(lineArr), trainWeights))!=int(currLine[21]):
      errorCount += 1
  frTest.close()
  errorRate = (float(errorCount))/numTestVec
  return errorRate
def multiTest(ftr, fte, numT, numIter):
  errors=[]
  for k in range(numT):
    error = colicTest(ftr, fte, numIter)
    errors.append(error)
  print "There "+str(len(errors))+" test with "+str(numIter)+" interations in all!"
  for i in range(numT):
    print "The "+str(i+1)+"th"+" testError is:"+str(errors[i])
  print "Average testError: ", float(sum(errors))/len(errors)
'''''
data, labels = loadDataSet()
weights0 = stoGradAscent0(array(data), labels)
weights,errors = gradAscent(data, labels)
weights1= stoGradAscent1(array(data), labels, 500)
print weights
plotBestFit(weights)
print weights0
weights00 = []
for w in weights0:
  weights00.append([w])
plotBestFit(mat(weights00))
print weights1
weights11=[]
for w in weights1:
  weights11.append([w])
plotBestFit(mat(weights11))
'''
multiTest(r"horseColicTraining.txt",r"horseColicTest.txt",10,500)

總結(jié)

以上就是本文關(guān)于機器學(xué)習(xí)經(jīng)典算法-logistic回歸代碼詳解的全部內(nèi)容,希望對大家有所幫助。如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/moodytong/article/details/9731283

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产美女一区二区在线观看 | 毛片免费在线 | 亚洲网站在线观看 | 高清在线观看av | 在线播放一区二区三区 | 在线播放av片 | 看免费一级毛片 | 久久精品国产亚洲7777 | 9191色| 午夜久久久精品一区二区三区 | 久久艹艹艹 | 国产精品国产成人国产三级 | 亚洲3atv精品一区二区三区 | 91精品久久久久久久久久久 | 成人免费毛片一 | 天天草夜夜骑 | 禁漫天堂久久久久久久久久 | 色婷婷久久久久久 | 黄色视频a级毛片 | 伊人99re| 精品中文视频 | 91av在线免费播放 | 免费一级特黄欧美大片勹久久网 | 成人福利在线观看 | 精品一区二区三区电影 | 精品亚洲视频在线 | 久久久久久91 | 狠狠操视频网站 | 国产成人精品一区在线播放 | 美女久久久久 | 欧美一级高清免费 | 久久精品欧美视频 | 精品无吗乱吗av国产爱色 | 欧美 videos粗暴 | 毛片毛片免费看 | 国产精品亚洲yourport | 国产精品剧情一区二区三区 | 国产免费大片视频 | 国产精品美女久久久久久不卡 | 深夜影院一级毛片 | 亚洲射吧 |