自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SVM的Map-Reduce數(shù)據(jù)挖掘算法

數(shù)據(jù)庫 算法
SVM支持向量機,最近十五年機器學習界的明星算法,學術界也是各種研究,現(xiàn)今已經(jīng)達到一個瓶頸,屋漏偏逢連夜雨,隨著深度學習的雄起,SVM弄的一個人走茶涼的境遇(也許正是90年代神經(jīng)網(wǎng)絡的感受吧,呵呵),現(xiàn)在講一講關于SVM的并行。

由于原算法較難應用并行策略,而它的另一個算法變種-pegasos 適合并行,下面是該算法的過程。

初始化W=0(向量形式)

for i in t:

     隨機選擇K個樣本

     for j in K:

          if 第j個樣本分錯

              利用該樣本更新權重

     累加W的更新

end for   

下面是基于mrjob的map-reduce版   

  1. class MRsvm(MRJob): 
  2.  
  3.     DEFAULT_INPUT_PROTOCOL = 'json_value' 
  4.  
  5.     #一些參數(shù)的設置 
  6.  
  7.     def __init__(self, *args, **kwargs): 
  8.  
  9.         super(MRsvm, self).__init__(*args, **kwargs) 
  10.  
  11.         self.data = pickle.load(open('data_path')) 
  12.  
  13.         self.w = 0 
  14.  
  15.         self.eta = 0.69 #學習率 
  16.  
  17.         self.dataList = [] #用于收集樣本的列表 
  18.  
  19.         self.k = self.options.batchsize 
  20.  
  21.         self.numMappers = 1  
  22.  
  23.         self.t = 1 # 迭代次數(shù) 
  24.  
  25.  
  26.     def map(self, mapperId, inVals):  
  27.  
  28.         #<key,value> 對應著 <機器mapperID,W值或者樣本特征跟標簽> 
  29.  
  30.         if False: yield 
  31.  
  32.         #判斷value是屬于W還是樣本ID 
  33.  
  34.         if inVals[0]=='w':  
  35.  
  36.             self.w = inVals[1] 
  37.  
  38.         elif inVals[0]=='x'
  39.  
  40.             self.dataList.append(inVals[1]) 
  41.  
  42.         elif inVals[0]=='t': self.t = inVals[1]  
  43.  
  44.  
  45.     def map_fin(self): 
  46.  
  47.         labels = self.data[:,-1]; X=self.data[:,0:-1]#解析樣本數(shù)據(jù) 
  48.  
  49.         if self.w == 0: self.w = [0.001]*shape(X)[1] #初始化W 
  50.  
  51.         for index in self.dataList: 
  52.  
  53.             p = mat(self.w)*X[index,:].T #分類該樣本  
  54.  
  55.             if labels[index]*p < 1.0: 
  56.  
  57.                 yield (1, ['u', index])#這是錯分樣本id,記錄該樣本的id  
  58.  
  59.         yield (1, ['w', self.w]) #map輸出該worker的w 
  60.  
  61.         yield (1, ['t', self.t]) 
  62.  
  63.  
  64.     def reduce(self, _, packedVals): 
  65.  
  66.         for valArr in packedVals: #解析數(shù)據(jù),錯分樣本ID,W,迭代次數(shù) 
  67.  
  68.             if valArr[0]=='u': self.dataList.append(valArr[1]) 
  69.  
  70.             elif valArr[0]=='w': self.w = valArr[1] 
  71.  
  72.             elif valArr[0]=='t': self.t = valArr[1]  
  73.  
  74.         labels = self.data[:,-1]; X=self.data[:,0:-1] 
  75.  
  76.         wMat = mat(self.w); wDelta = mat(zeros(len(self.w))) 
  77.  
  78.         for index in self.dataList: 
  79.  
  80.             wDelta += float(labels[index])*X[index,:] #更新W 
  81.  
  82.         eta = 1.0/(2.0*self.t) #更新學習速率 
  83.  
  84.         #累加對W的更新 
  85.  
  86.         wMat = (1.0 - 1.0/self.t)*wMat + (eta/self.k)*wDelta 
  87.  
  88.         for mapperNum in range(1,self.numMappers+1): 
  89.  
  90.             yield (mapperNum, ['w', wMat.tolist()[0] ]) 
  91.  
  92.             if self.t < self.options.iterations: 
  93.  
  94.                 yield (mapperNum, ['t', self.t+1]) 
  95.  
  96.                 for j in range(self.k/self.numMappers): 
  97.  
  98.                     yield (mapperNum, ['x', random.randint(shape(self.data)[0]) ]) 
  99.  
  100.          
  101.     def steps(self): 
  102.  
  103.         return ([self.mr(mapper=self.map, reducer=self.reduce,  
  104.  
  105.                          mapper_final=self.map_fin)]*self.options.iterations) 
責任編輯:彭凡 來源: YYGamer
相關推薦

2010-06-03 16:46:23

Hadoop Map-

2015-01-08 14:52:29

google云計算分布式計算框架

2024-01-10 08:47:48

Python函數(shù)Map()

2024-11-08 12:42:34

Rustmapfilter

2023-01-03 13:30:14

C++代碼map

2009-07-03 19:58:51

SQL Server2

2017-05-26 08:53:27

數(shù)據(jù)挖掘算法

2024-07-11 12:14:20

Pythonmapfilter

2014-03-17 15:28:48

MapReduce

2012-08-09 09:57:54

K-means

2015-09-21 09:20:55

2009-08-05 10:00:04

數(shù)據(jù)挖掘算法SQL Server

2011-01-26 09:14:43

數(shù)據(jù)挖掘

2016-01-29 11:00:55

數(shù)據(jù)挖掘算法大數(shù)據(jù)

2009-04-13 10:15:24

SQLServer 2005數(shù)據(jù)挖掘

2014-07-16 16:54:38

2024-06-04 00:20:00

Python函數(shù)

2021-03-22 06:28:44

reducemap函數(shù)

2012-08-28 09:15:33

Hadoop海量數(shù)據(jù)挖掘算法

2020-06-03 15:35:10

數(shù)據(jù)挖掘算法大數(shù)據(jù)
點贊
收藏

51CTO技術棧公眾號