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

首頁 > 學院 > 開發設計 > 正文

機器學習——Logistic回歸

2019-11-14 17:44:03
字體:
來源:轉載
供稿:網友

參考《機器學習實戰》

利用Logistic回歸進行分類的主要思想:

根據現有數據對分類邊界線建立回歸公式,以此進行分類。

image

分類借助的Sigmoid函數:image

Sigmoid函數圖:

image

Sigmoid函數的作用:

將所有特征都乘上一個回歸系數,然后將所有結果值相加,將這個總和代入Sigmoid函數中,進而得到一個0~1之間的數值。任何大于0.5的數據被分1類,小于0.5分入0類。

綜上,Sigmoid的輸入可以記為z:

image

所以向量w即是我們要通過最優化方法找的系數。

w向量的求解:

1)、梯度上升法(思想:沿函數梯度方向找函數最大值)

image

梯度上升法偽代碼:

image

更新w系數的細節實現代碼:

image

要注意的是,作者在這里dataMatrix的特征矢量維度比實際特征矢量多了一維。作者使用的數據是二維[x1,x2],而程序中增加了一維[x0=1,x1,x2].奇怪的是x0加在了最前面的位置,而不是最后的位置。此外,上圖中畫紅線處的公式作者未給出由來,網上搜索了下,找到一篇博文,寫得還不錯。這里帖上點簡要概述:

具體過程如下:(參考:http://blog.csdn.net/yangliuy/article/details/18504921?reload

參數概率方程:

wps_clip_image-15677

其中x為訓練特征,y為x對應的類,θ為待估計參數

利用上式中y只取0或1的特點,剛好可以表示為:

wps_clip_image-1599

似然函數:(這里就是Logistic Regression的目標函數,原書中并未指明,所以如果不網上找logistic的資料區先前學過機器學習,很無法理解書中的做法的)

wps_clip_image-9416

對數似然函數:

wps_clip_image-32044

所以極大似然估計:

wps_clip_image-13813

從而得到梯度上升法的遞歸公式:

wps_clip_image-27630

這里也就是上面的圖中,我畫紅線處公式的由來了。

這里再上傳下自己寫的代碼(未優化的logistic算法),代碼中的數據來源仍是《機器學習實戰》一書提供的數據:

#-*- coding:cp936 -*-import numpy as npimport matplotlib.pyplot as pltclass Log_REG():    def __init__(self):        self._closed=False            def loadData(self, dataFile='testSet.txt'):        f_file = open(dataFile)        lines = f_file.readlines()        line_data = lines[0].strip().split()        self.num_feature = len(line_data) - 1        self.xData = np.zeros((len(lines), self.num_feature + 1))        self.label = np.zeros((len(lines), 1))        self.num_label = len(lines)        line_cnt = 0        for iLine in lines:            line_data = iLine.strip().split()              for i in range(self.num_feature):                self.xData[line_cnt][i] = float(line_data[i])            self.xData[line_cnt][self.num_feature] = 1            self.label[line_cnt] = float(line_data[-1])            line_cnt+=1        def _sigmoid(self, z):        return 1.0 / (1 + np.exp(-z))        def gradAscendClass(self):        maxIter = 500        self.omiga = np.ones((1, self.num_feature+1))        xDataMat = np.matrix(self.xData)        alpha = 0.01        self.omiga_record=[]        for i in range(maxIter):            h = self._sigmoid(self.omiga * xDataMat.transpose())  # 矩陣乘            error = self.label - h.transpose()            self.omiga = self.omiga + alpha * (xDataMat.transpose()*error).transpose()             self.omiga_record.append(self.omiga)            if np.sum(np.abs(error)) < self.num_label * 0.05:                PRint  "error very low",i                break        def stochasticGradAscend(self):        pass#         maxIter = 150#         self.omiga = np.ones((1,self.num_feature+1))#         for     def plotResult(self):        self._close()        if self.num_feature != 2:            print "Only plot data with 2 features!"            return        label0x = []        label0y = []        label1x = []        label1y = []        for i in range(self.num_label):            if int(self.label[i]) == 1:                label1x.append(self.xData[i][0])                label1y.append(self.xData[i][1])            else:                label0x.append(self.xData[i][0])                label0y.append(self.xData[i][1])        fig = plt.figure()        ax = fig.add_subplot(111)        ax.scatter(label0x, label0y, c='b',marker='o')        ax.scatter(label1x, label1y, c='r',marker='s')                minx = min(min(label0x),min(label1x))        maxx = max(max(label0x),max(label1x))        wx = np.arange(minx,maxx,0.1)        wy = (-self.omiga[0,2]-self.omiga[0,0]*wx)/self.omiga[0,1]         ax.plot(wx,wy)                def plotIteration(self):        self._close()        iterTimes = len(self.omiga_record)        w0=[i[0][0,0] for i in self.omiga_record]        w1=[i[0][0,1] for i in self.omiga_record]        w2=[i[0][0,2] for i in self.omiga_record]        fig = plt.figure()        ax1 = fig.add_subplot(3,1,1)        ax1.plot(range(iterTimes),w0,c='b')#,marker='*')        plt.xlabel('w0')        ax2 = fig.add_subplot(3,1,2)        ax2.plot(range(iterTimes),w1,c='r')#,marker='s')        plt.xlabel('w1')        ax3 = fig.add_subplot(3,1,3)        ax3.plot(range(iterTimes),w2,c='g')#,marker='o')        plt.xlabel('w2')    def show(self):        plt.show()    def _close(self):        pass                            if __name__ =='__main__':    testclass = Log_REG()    testclass.loadData()    testclass.gradAscendClass()    testclass.plotResult()        testclass.plotIteration()    testclass.show()
顯示結果:

image

分類結果

image

分類參數收斂結果

梯度上升(或下降)算法的改進:

當數據量很大時,上述梯度上升算法每次迭代都要對所有數據進行處理,會造成計算量異常龐大。解決的方法是引入隨機梯度的思想。

隨機梯度下降的基本原理是:不直接計算梯度的精確值,而是用梯度的無偏估計g(w)來代替梯度:

image

image實際操作時,隨機地選取單個數據而非整個數據集參與迭代,詳細的原理推導可參見http://www.52ml.net/2024.html

改進的隨機梯度上升法:

def stochasticGradAscend2(self):        maxIter = 150        self.omiga = np.ones((1,self.num_feature+1))        self.omiga_record=[]                for j in range(maxIter):            randRange = range(self.xData.shape[0])            for i in range(self.xData.shape[0]):                alpha = 4/(1.0+i+j)+0.01                randIndex  = int(random.uniform(0,len(randRange)-1))                index = randRange[randIndex]                h = self._sigmoid(np.matrix(self.omiga)[0]*np.matrix(self.xData[index,:]).transpose())                error = self.label[index]-h                                self.omiga  = self.omiga+alpha*error*self.xData[index,:]                self.omiga_record.append(np.matrix(self.omiga))                del(randRange[randIndex])

image

從上圖可以看出,改進后的隨機梯度算法收斂很快,上圖只對所有數據做150次迭代。

參考文獻:

http://blog.csdn.net/yangliuy/article/details/18504921?reload

隨機梯度:http://www.52ml.net/2024.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文国产成人精品久久一| 5566成人精品视频免费| 亚洲福利视频网| 亚洲福利视频久久| 91在线视频九色| 欧美激情欧美狂野欧美精品| 国产97免费视| 亚洲福利在线视频| 日本三级久久久| 91社区国产高清| 久久69精品久久久久久国产越南| 97av在线影院| 国产香蕉精品视频一区二区三区| 亚洲香蕉伊综合在人在线视看| 亚洲成人网av| 国产成人啪精品视频免费网| 欧美激情亚洲一区| 国产成人精品a视频一区www| 超碰精品一区二区三区乱码| 久久久精品免费| 亚洲精品久久久久国产| 亚洲精品91美女久久久久久久| 欧美一区二区三区……| xxx欧美精品| 日韩中文在线中文网在线观看| 亚洲视频在线观看视频| 亚洲男人av在线| 中文日韩在线视频| 久久久久久久久亚洲| 91精品国产91久久久| 欧美一区二区三区四区在线| 久久精品国产91精品亚洲| 青青草一区二区| 亚洲自拍小视频免费观看| 欧美成人免费va影院高清| 国产精品电影久久久久电影网| 精品久久久久久中文字幕大豆网| 国产精品免费视频久久久| 色综合色综合网色综合| 午夜免费日韩视频| 欧美精品免费播放| 欧美电影免费在线观看| 欧美精品少妇videofree| 中文字幕成人精品久久不卡| 性色av一区二区三区红粉影视| 欧美激情一区二区三区在线视频观看| 国产精品日韩电影| 亚洲第一中文字幕在线观看| 国产精品手机播放| 51视频国产精品一区二区| 韩剧1988在线观看免费完整版| 国产精品久久久精品| 亚洲精品成a人在线观看| 亚洲xxx大片| 一级做a爰片久久毛片美女图片| 91在线观看免费| 亚洲自拍偷拍网址| 国产日韩欧美夫妻视频在线观看| 久久99视频精品| 国产一区二区三区高清在线观看| 亚洲偷熟乱区亚洲香蕉av| 色婷婷av一区二区三区在线观看| 精品国产91久久久久久| 久久精品视频va| 亚洲欧美成人精品| 午夜精品久久久久久99热| 欧美成人小视频| 欧美综合在线第二页| 国产成人精品网站| www.xxxx欧美| 欧美日韩亚洲精品内裤| 日韩视频在线免费观看| 亚洲在线免费视频| 日韩免费观看网站| 亚州av一区二区| 久久免费视频这里只有精品| 欧美精品一本久久男人的天堂| 久久久91精品| 日韩中文字幕视频在线观看| 日本一区二区在线播放| 91麻豆桃色免费看| 国产成人免费av| 久99久在线视频| 精品精品国产国产自在线| 久久成人一区二区| 日本sm极度另类视频| 国产91精品视频在线观看| 欧美成人中文字幕| 国产精品中文字幕久久久| 国产在线播放不卡| 69精品小视频| 欧美黑人性生活视频| 综合网日日天干夜夜久久| 中文字幕亚洲二区| 国产欧美日韩综合精品| 欧美激情视频网址| 亚洲夜晚福利在线观看| 国产最新精品视频| 在线日韩欧美视频| 中文字幕精品一区二区精品| 国产视频丨精品|在线观看| 亚洲午夜精品视频| 亚洲综合国产精品| 91精品国产综合久久香蕉922| 国产精品久久久久久网站| 日韩小视频在线观看| 久久视频在线直播| 久久精品免费播放| 91av视频导航| 亚洲丝袜av一区| 欧美日韩另类在线| 在线视频免费一区二区| www国产亚洲精品久久网站| 久久高清视频免费| 欧美黑人狂野猛交老妇| 色偷偷噜噜噜亚洲男人的天堂| 久久久久久成人精品| 亚洲第一网站男人都懂| 国产精品第2页| 最近中文字幕mv在线一区二区三区四区| 精品福利在线看| 国产精品影院在线观看| 777午夜精品福利在线观看| 欧美激情精品久久久久久变态| 中文字幕精品国产| 久久精品在线播放| 在线日韩精品视频| 日韩网站免费观看高清| 亚洲xxxx18| 亚洲一区二区三区乱码aⅴ| 一区二区国产精品视频| 亚洲欧美日韩视频一区| 日韩电影大片中文字幕| 欧美视频免费在线| 全亚洲最色的网站在线观看| 国产在线观看91精品一区| 欧美极品美女电影一区| 91精品国产综合久久久久久久久| 国产日韩欧美在线观看| 欧美激情极品视频| 国产精品999| 91国内在线视频| 日韩av综合网| 亚洲精品永久免费| 亚洲白虎美女被爆操| 国产精品自产拍高潮在线观看| 亚洲欧洲成视频免费观看| 2019中文字幕在线观看| 亚洲变态欧美另类捆绑| 欧美日韩国内自拍| 欧美精品videofree1080p| 日韩成人在线视频| 国产91露脸中文字幕在线| 国产一区二中文字幕在线看| 欧美日韩亚洲精品一区二区三区| 成人美女av在线直播| 成人免费看黄网站| 久久99热精品这里久久精品| 亚洲欧美日韩精品久久亚洲区| 91九色蝌蚪国产| 日韩在线观看免费全集电视剧网站| 精品视频在线播放色网色视频| 国产精品九九九| 欧美成人在线免费|