亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python SVM(支持向量機)實現方法完整示例

2020-02-15 21:54:59
字體:
來源:轉載
供稿:網友

本文實例講述了Python SVM(支持向量機)實現方法。分享給大家供大家參考,具體如下:

運行環境

Pyhton3 numpy(科學計算包) matplotlib(畫圖所需,不畫圖可不必)

計算過程

st=>start: 開始
e=>end: 結束
op1=>operation: 讀入數據
op2=>operation: 格式化數據
cond=>condition: 是否達到迭代次數
op3=>operation: 尋找超平面分割最小間隔
ccond=>conditon: 數據是否改變
op4=>operation: 輸出結果
st->op1->op2->cond
cond(yes)->op4->e
cond(no)->op3

啊,這markdown flow好難用,我決定就畫到這吧=。=

輸入樣例

/* testSet.txt */3.542485 1.977398 -13.018896 2.556416 -17.551510 -1.580030 12.114999 -0.004466 -18.127113 1.274372 17.108772 -0.986906 18.610639 2.046708 12.326297 0.265213 -13.634009 1.730537 -10.341367 -0.894998 -13.125951 0.293251 -12.123252 -0.783563 -10.887835 -2.797792 -17.139979 -2.329896 11.696414 -1.212496 -18.117032 0.623493 18.497162 -0.266649 14.658191 3.507396 -18.197181 1.545132 11.208047 0.213100 -11.928486 -0.321870 -12.175808 -0.014527 -17.886608 0.461755 13.223038 -0.552392 -13.628502 2.190585 -17.407860 -0.121961 17.286357 0.251077 12.301095 -0.533988 -1-0.232542 -0.547690 -13.457096 -0.082216 -13.023938 -0.057392 -18.015003 0.885325 18.991748 0.923154 17.916831 -1.781735 17.616862 -0.217958 12.450939 0.744967 -17.270337 -2.507834 11.749721 -0.961902 -11.803111 -0.176349 -18.804461 3.044301 11.231257 -0.568573 -12.074915 1.410550 -1-0.743036 -1.736103 -13.536555 3.964960 -18.410143 0.025606 17.382988 -0.478764 16.960661 -0.245353 18.234460 0.701868 18.168618 -0.903835 11.534187 -0.622492 -19.229518 2.066088 17.886242 0.191813 12.893743 -1.643468 -11.870457 -1.040420 -15.286862 -2.358286 16.080573 0.418886 12.544314 1.714165 -16.016004 -3.753712 10.926310 -0.564359 -10.870296 -0.109952 -12.369345 1.375695 -11.363782 -0.254082 -17.279460 -0.189572 11.896005 0.515080 -18.102154 -0.603875 12.529893 0.662657 -11.963874 -0.365233 -18.132048 0.785914 18.245938 0.372366 16.543888 0.433164 1-0.236713 -5.766721 -18.112593 0.295839 19.803425 1.495167 11.497407 -0.552916 -11.336267 -1.632889 -19.205805 -0.586480 11.966279 -1.840439 -18.398012 1.584918 17.239953 -1.764292 17.556201 0.241185 19.015509 0.345019 18.266085 -0.230977 18.545620 2.788799 19.295969 1.346332 12.404234 0.570278 -12.037772 0.021919 -11.727631 -0.453143 -11.979395 -0.050773 -18.092288 -1.372433 11.667645 0.239204 -19.854303 1.365116 17.921057 -1.327587 18.500757 1.492372 11.339746 -0.291183 -13.107511 0.758367 -12.609525 0.902979 -13.263585 1.367898 -12.912122 -0.202359 -11.731786 0.589096 -12.387003 1.573131 -1

代碼實現

# -*- coding:utf-8 -*-#!python3__author__ = 'Wsine'from numpy import *import matplotlib.pyplot as pltimport operatorimport timedef loadDataSet(fileName):  dataMat = []  labelMat = []  with open(fileName) as fr:    for line in fr.readlines():      lineArr = line.strip().split('/t')      dataMat.append([float(lineArr[0]), float(lineArr[1])])      labelMat.append(float(lineArr[2]))  return dataMat, labelMatdef selectJrand(i, m):  j = i  while (j == i):    j = int(random.uniform(0, m))  return jdef clipAlpha(aj, H, L):  if aj > H:    aj = H  if L > aj:    aj = L  return ajclass optStruct:  def __init__(self, dataMatIn, classLabels, C, toler):    self.X = dataMatIn    self.labelMat = classLabels    self.C = C    self.tol = toler    self.m = shape(dataMatIn)[0]    self.alphas = mat(zeros((self.m, 1)))    self.b = 0    self.eCache = mat(zeros((self.m, 2)))def calcEk(oS, k):  fXk = float(multiply(oS.alphas, oS.labelMat).T * (oS.X * oS.X[k, :].T)) + oS.b  Ek = fXk - float(oS.labelMat[k])  return Ekdef selectJ(i, oS, Ei):  maxK = -1  maxDeltaE = 0  Ej = 0  oS.eCache[i] = [1, Ei]  validEcacheList = nonzero(oS.eCache[:, 0].A)[0]  if (len(validEcacheList)) > 1:    for k in validEcacheList:      if k == i:        continue      Ek = calcEk(oS, k)      deltaE = abs(Ei - Ek)      if (deltaE > maxDeltaE):        maxK = k        maxDeltaE = deltaE        Ej = Ek    return maxK, Ej  else:    j = selectJrand(i, oS.m)    Ej = calcEk(oS, j)  return j, Ejdef updateEk(oS, k):  Ek = calcEk(oS, k)  oS.eCache[k] = [1, Ek]def innerL(i, oS):  Ei = calcEk(oS, i)  if ((oS.labelMat[i] * Ei < -oS.tol) and (oS.alphas[i] < oS.C)) or ((oS.labelMat[i] * Ei > oS.tol) and (oS.alphas[i] > 0)):    j, Ej = selectJ(i, oS, Ei)    alphaIold = oS.alphas[i].copy()    alphaJold = oS.alphas[j].copy()    if (oS.labelMat[i] != oS.labelMat[j]):      L = max(0, oS.alphas[j] - oS.alphas[i])      H = min(oS.C, oS.C + oS.alphas[j] - oS.alphas[i])    else:      L = max(0, oS.alphas[j] + oS.alphas[i] - oS.C)      H = min(oS.C, oS.alphas[j] + oS.alphas[i])    if (L == H):      # print("L == H")      return 0    eta = 2.0 * oS.X[i, :] * oS.X[j, :].T - oS.X[i, :] * oS.X[i, :].T - oS.X[j, :] * oS.X[j, :].T    if eta >= 0:      # print("eta >= 0")      return 0    oS.alphas[j] -= oS.labelMat[j] * (Ei - Ej) / eta    oS.alphas[j] = clipAlpha(oS.alphas[j], H, L)    updateEk(oS, j)    if (abs(oS.alphas[j] - alphaJold) < 0.00001):      # print("j not moving enough")      return 0    oS.alphas[i] += oS.labelMat[j] * oS.labelMat[i] * (alphaJold - oS.alphas[j])    updateEk(oS, i)    b1 = oS.b - Ei - oS.labelMat[i] * (oS.alphas[i] - alphaIold) * oS.X[i, :] * oS.X[i, :].T - oS.labelMat[j] * (oS.alphas[j] - alphaJold) * oS.X[i, :] * oS.X[j, :].T    b2 = oS.b - Ei - oS.labelMat[i] * (oS.alphas[i] - alphaIold) * oS.X[i, :] * oS.X[j, :].T - oS.labelMat[j] * (oS.alphas[j] - alphaJold) * oS.X[j, :] * oS.X[j, :].T    if (0 < oS.alphas[i]) and (oS.C > oS.alphas[i]):      oS.b = b1    elif (0 < oS.alphas[j]) and (oS.C > oS.alphas[j]):      oS.b = b2    else:      oS.b = (b1 + b2) / 2.0    return 1  else:    return 0def smoP(dataMatIn, classLabels, C, toler, maxIter, kTup=('lin', 0)):  """  輸入:數據集, 類別標簽, 常數C, 容錯率, 最大循環次數  輸出:目標b, 參數alphas  """  oS = optStruct(mat(dataMatIn), mat(classLabels).transpose(), C, toler)  iterr = 0  entireSet = True  alphaPairsChanged = 0  while (iterr < maxIter) and ((alphaPairsChanged > 0) or (entireSet)):    alphaPairsChanged = 0    if entireSet:      for i in range(oS.m):        alphaPairsChanged += innerL(i, oS)      # print("fullSet, iter: %d i:%d, pairs changed %d" % (iterr, i, alphaPairsChanged))      iterr += 1    else:      nonBoundIs = nonzero((oS.alphas.A > 0) * (oS.alphas.A < C))[0]      for i in nonBoundIs:        alphaPairsChanged += innerL(i, oS)        # print("non-bound, iter: %d i:%d, pairs changed %d" % (iterr, i, alphaPairsChanged))      iterr += 1    if entireSet:      entireSet = False    elif (alphaPairsChanged == 0):      entireSet = True    # print("iteration number: %d" % iterr)  return oS.b, oS.alphasdef calcWs(alphas, dataArr, classLabels):  """  輸入:alphas, 數據集, 類別標簽  輸出:目標w  """  X = mat(dataArr)  labelMat = mat(classLabels).transpose()  m, n = shape(X)  w = zeros((n, 1))  for i in range(m):    w += multiply(alphas[i] * labelMat[i], X[i, :].T)  return wdef plotFeature(dataMat, labelMat, weights, b):  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, 0])      ycord1.append(dataArr[i, 1])    else:      xcord2.append(dataArr[i, 0])      ycord2.append(dataArr[i, 1])  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(2, 7.0, 0.1)  y = (-b[0, 0] * x) - 10 / linalg.norm(weights)  ax.plot(x, y)  plt.xlabel('X1'); plt.ylabel('X2')  plt.show()def main():  trainDataSet, trainLabel = loadDataSet('testSet.txt')  b, alphas = smoP(trainDataSet, trainLabel, 0.6, 0.0001, 40)  ws = calcWs(alphas, trainDataSet, trainLabel)  print("ws = /n", ws)  print("b = /n", b)  plotFeature(trainDataSet, trainLabel, ws, b)if __name__ == '__main__':  start = time.clock()  main()  end = time.clock()  print('finish all in %s' % str(end - start))            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文有码在线视频| 欧美日韩国产成人高清视频| 久久99视频免费| 欧美美女18p| 日韩成人久久久| 狠狠干狠狠久久| xxxx欧美18另类的高清| 九九视频这里只有精品| 精品国产精品三级精品av网址| 欧美国产高跟鞋裸体秀xxxhd| 亚洲跨种族黑人xxx| 国产精品日日摸夜夜添夜夜av| 日韩av理论片| 97香蕉超级碰碰久久免费的优势| 久久手机免费视频| 亚洲欧美国产日韩中文字幕| 中文字幕亚洲无线码在线一区| 久久亚洲国产成人| 亚洲欧美在线免费| 亚洲成色www8888| 欧美一级淫片aaaaaaa视频| 国产精品免费视频xxxx| 国产精品高清网站| 国产免费一区二区三区在线能观看| www.欧美视频| 日韩中文字幕第一页| 欧美激情精品久久久久久久变态| 亚洲欧美精品中文字幕在线| 亚洲成人激情视频| 日本韩国在线不卡| 疯狂做受xxxx高潮欧美日本| 欧美黄网免费在线观看| 日韩激情在线视频| 亚洲a∨日韩av高清在线观看| 日韩成人在线电影网| 日韩av大片免费看| 久久成人综合视频| 国产精品99久久99久久久二8| 久久久久久久久久婷婷| 亚洲精品福利视频| 精品成人69xx.xyz| 4k岛国日韩精品**专区| 久久国产精品首页| 亚洲国产欧美久久| 亚洲精美色品网站| 亚洲无限av看| 欧美激情免费视频| 国内外成人免费激情在线视频| 91免费观看网站| 国产精品91久久| 97婷婷涩涩精品一区| 欧美精品aaa| 91精品综合视频| 亚洲视频一区二区三区| 欧美激情手机在线视频| 欧美黑人巨大精品一区二区| 欧美专区在线视频| 亚洲一区二区三| 久久艳片www.17c.com| 国产欧美精品一区二区三区-老狼| 日韩在线资源网| 一区二区三区视频观看| 视频一区视频二区国产精品| 亚洲黄色www| 久久久久久久香蕉网| 亲子乱一区二区三区电影| 久久精品国产电影| 揄拍成人国产精品视频| 精品视频中文字幕| 夜夜嗨av一区二区三区四区| 国产一区二区黑人欧美xxxx| 九九久久久久99精品| 51精品在线观看| www国产91| 日韩a**站在线观看| 国内精品久久久久影院 日本资源| 亚洲最大福利网| 亚洲成av人片在线观看香蕉| 国产精品高潮呻吟久久av野狼| 欧美在线观看一区二区三区| 国产精品精品视频一区二区三区| 国产91热爆ts人妖在线| 久久夜色撩人精品| 色777狠狠综合秋免鲁丝| 精品自拍视频在线观看| 高清视频欧美一级| 69久久夜色精品国产69| 亚洲成人黄色在线观看| 人人做人人澡人人爽欧美| 久久精品国产久精国产一老狼| 777午夜精品福利在线观看| 欧美乱大交做爰xxxⅹ性3| 国产精品国产自产拍高清av水多| 日韩中文字幕在线| 日韩欧美视频一区二区三区| 日韩在线欧美在线国产在线| 97视频网站入口| 国产香蕉一区二区三区在线视频| 亚洲另类欧美自拍| 奇米4444一区二区三区| 97不卡在线视频| 韩剧1988免费观看全集| 中文综合在线观看| 国产精品揄拍一区二区| 欧美天天综合色影久久精品| 中文字幕日韩免费视频| 色av吧综合网| 久久久91精品国产一区不卡| 亚洲网在线观看| 韩国日本不卡在线| 日本三级韩国三级久久| 日韩在线观看网址| 一区二区三区 在线观看视| 欧美午夜精品在线| 日韩精品免费电影| 国产成人黄色av| 国产精品1区2区在线观看| 91精品视频一区| 亚洲国产免费av| 欧美怡红院视频一区二区三区| 中文字幕日韩欧美在线| 亚洲一区二区三区乱码aⅴ| 亚洲老头老太hd| 亚洲精品国产精品久久清纯直播| 国产精品福利观看| 亚洲精品欧美日韩| 91国产视频在线播放| 国产精品久久久久高潮| 亚洲tv在线观看| 日韩中文综合网| 欧美一区二区大胆人体摄影专业网站| 亚洲视频日韩精品| 97精品欧美一区二区三区| 在线视频一区二区| 欧美成年人在线观看| 性欧美在线看片a免费观看| 日本欧美国产在线| 91夜夜揉人人捏人人添红杏| 91九色综合久久| 欧美日韩激情小视频| 亚洲偷熟乱区亚洲香蕉av| 69**夜色精品国产69乱| 久久久亚洲天堂| 日本在线观看天堂男亚洲| 亚洲人成伊人成综合网久久久| 亚洲人成亚洲人成在线观看| 国产成人免费av| 亚洲视频在线观看网站| 日本a级片电影一区二区| 欧美精品日韩www.p站| 精品美女永久免费视频| 久久精品国产v日韩v亚洲| 亚洲香蕉伊综合在人在线视看| 欧美日韩在线看| 欧美性猛交xxx| 久久精品2019中文字幕| 欧美视频国产精品| 欧美日韩激情网| 亚洲成人在线网| 亚洲色图25p| 国产午夜精品麻豆| 91精品国产777在线观看| 亚洲精品v天堂中文字幕| 中文字幕自拍vr一区二区三区|