最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年12月22日 15:39:58   作者:moodytong  
這篇文章主要介紹了機器學習經(jīng)典算法-logistic回歸代碼詳解,具有一定借鑒價值,需要的朋友可以參考下。

一、算法簡要

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

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

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

1.2參數(shù)的求解

二、代碼實現(xiàn)

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

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] - h  
    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) 

總結

以上就是本文關于機器學習經(jīng)典算法-logistic回歸代碼詳解的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

python中實現(xiàn)k-means聚類算法詳解

Python編程實現(xiàn)粒子群算法(PSO)詳解

Python編程實現(xiàn)蟻群算法詳解

如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關文章

  • Pandas技巧分享之讀取多個文件

    Pandas技巧分享之讀取多個文件

    日常分析數(shù)據(jù)時,只有單一數(shù)據(jù)文件的情況其實很少見,更多的情況是,從同一個數(shù)據(jù)來源定期或不定期的采集了很多數(shù)據(jù)文件,那么如何讀取多個文件呢,下面就和大家簡單講講
    2023-07-07
  • 利用Python如何實現(xiàn)一個小說網(wǎng)站雛形

    利用Python如何實現(xiàn)一個小說網(wǎng)站雛形

    這篇文章主要給大家介紹了關于利用Python如何實現(xiàn)一個小說網(wǎng)站雛形的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • 基于django channel實現(xiàn)websocket的聊天室的方法示例

    基于django channel實現(xiàn)websocket的聊天室的方法示例

    這篇文章主要介紹了基于基于django channel實現(xiàn)websocket的聊天室的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Python中class內置方法__init__與__new__作用與區(qū)別解析

    Python中class內置方法__init__與__new__作用與區(qū)別解析

    這篇文章主要介紹了Python中class內置方法__init__與__new__作用與區(qū)別探究,本文中涉及的類均為Python3中默認的新式類,對應Python2中則為顯式繼承了object的class,因為未繼承object基類的舊式類并沒有這些內置方法,需要的朋友可以參考下
    2022-09-09
  • python開發(fā)之thread線程基礎實例入門

    python開發(fā)之thread線程基礎實例入門

    這篇文章主要介紹了python開發(fā)之thread線程基礎,以三個實例形式分析了Python中thread線程的基本使用方法,涉及串行與并行程序的執(zhí)行原理及線程的操作技巧,需要的朋友可以參考下
    2015-11-11
  • Python的__builtin__模塊中的一些要點知識

    Python的__builtin__模塊中的一些要點知識

    這篇文章主要介紹了Python的__builtin__模塊中的一些要點知識,是Python學習中的基礎,需要的朋友可以參考下
    2015-05-05
  • python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形)

    python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形)

    這篇文章主要介紹了python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形) ,需要的朋友可以參考下
    2019-05-05
  • 基于OpenCV的仿射變換實現(xiàn)方法

    基于OpenCV的仿射變換實現(xiàn)方法

    這篇文章主要給大家介紹了關于基于OpenCV的仿射變換實現(xiàn)方法,仿射變換相當于將二維平面上的每個坐標點與一個2x3的矩陣相乘,得到新的坐標,而透視變換則是與3x3的矩陣相乘,需要的朋友可以參考下
    2024-01-01
  • pygame實現(xiàn)時鐘效果

    pygame實現(xiàn)時鐘效果

    這篇文章主要為大家詳細介紹了pygame實現(xiàn)時鐘效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python numpy矩陣處理運算工具用法匯總

    Python numpy矩陣處理運算工具用法匯總

    這篇文章主要介紹了Python numpy矩陣處理運算工具用法匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07

最新評論

桦甸市| 凤庆县| 仲巴县| 奉化市| 淄博市| 孟村| 内乡县| 无棣县| 余干县| 文水县| 通海县| 东乌珠穆沁旗| 泰兴市| 德清县| 额敏县| 临清市| 共和县| 安新县| 肇东市| 铜山县| 武城县| 呈贡县| 香格里拉县| 北安市| 三门县| 辽阳县| 军事| 桐庐县| 肃南| 伊宁县| 岑巩县| 长沙县| 宁安市| 达日县| 广汉市| 平武县| 西平县| 通州区| 光山县| 庆城县| 紫金县|