1. 程式人生 > >機器學習-周志華-課後習題答案-線性模型

機器學習-周志華-課後習題答案-線性模型

3.1試分析在什麼情況下,在以下式子中不比考慮偏置項b


答:線上性迴歸中,所有引數的確定都是為了讓殘差項的均值為0且殘差項的平方和最小。在所有其他引數項確定後,偏置項b(或者說是常數項)的變化體現出來的就是擬合曲線的上下整體浮動,可以看做是其他各個解釋變數留下的bias的線性修正。因此線上性擬合過程中是需要考慮偏置項的。

但若需要做的是比較不同自變數對因變數的影響,那麼不需要考慮常數項,這樣得到的迴歸係數是標準化的迴歸係數。

3.2試證明,對於引數w,對率迴歸(logistics迴歸)的目標函式(式1)是非凸的,但其對數似然函式(式2)是凸的。


3.3程式設計實現對率迴歸,並給出西瓜資料集3.0α上的結果

西瓜資料集3.0α:

編號

密度

含糖率

好瓜

1

0.697

0.46

2

0.774

0.376

3

0.634

0.264

4

0.608

0.318

5

0.556

0.215

6

0.403

0.237

7

0.481

0.149

8

0.437

0.211

9

0.666

0.091

10

0.243

0.0267

11

0.245

0.057

12

0.343

0.099

13

0.639

0.161

14

0.657

0.198

15

0.36

0.37

16

0.593

0.042

17

0.719

0.103

答:

首先將資料存入excel表,存為csv格式。再將是/否 轉為1/0

參考《機器學習實戰》的內容。本題分別寫了梯度上升方法以及隨機梯度上升方法。對書本上的程式做了一點點改動

  1. # -*- coding: cp936 -*-
  2. from numpy 
    import *  
  3. import pandas as pd  
  4. import matplotlib.pyplot as plt  
  5. #讀入csv檔案資料
  6. df=pd.read_csv('watermelon_3a.csv')  
  7. m,n=shape(df.values)  
  8. df['norm']=ones((m,1))  
  9. dataMat=array(df[['norm','density','ratio_sugar']].values[:,:])  
  10. labelMat=mat(df['label'].values[:]).transpose()  
  11. #sigmoid函式
  12. def sigmoid(inX):  
  13.     return1.0/(1+exp(-inX))  
  14. #梯度上升演算法
  15. def gradAscent(dataMat,labelMat):  
  16.     m,n=shape(dataMat)  
  17.     alpha=0.1
  18.     maxCycles=500
  19.     weights=array(ones((n,1)))  
  20.     for k in range(maxCycles):   
  21.         a=dot(dataMat,weights)  
  22.         h=sigmoid(a)  
  23.         error=(labelMat-h)  
  24.         weights=weights+alpha*dot(dataMat.transpose(),error)  
  25.     return weights  
  26. #隨機梯度上升
  27. def randomgradAscent(dataMat,label,numIter=50):  
  28.     m,n=shape(dataMat)  
  29.     weights=ones(n)  
  30.     for j in range(numIter):  
  31.         dataIndex=range(m)  
  32.         for i in range(m):  
  33.             alpha=40/(1.0+j+i)+0.2
  34.             randIndex_Index=int(random.uniform(0,len(dataIndex)))  
  35.             randIndex=dataIndex[randIndex_Index]  
  36.             h=sigmoid(sum(dot(dataMat[randIndex],weights)))  
  37.             error=(label[randIndex]-h)  
  38.             weights=weights+alpha*error[0,0]*(dataMat[randIndex].transpose())  
  39.             del(dataIndex[randIndex_Index])  
  40.     return weights  
  41. #畫圖
  42. def plotBestFit(weights):  
  43.     m=shape(dataMat)[0]  
  44.     xcord1=[]  
  45.     ycord1=[]  
  46.     xcord2=[]  
  47.     ycord2=[]  
  48.     for i in range(m):  
  49.         if labelMat[i]==1:  
  50.             xcord1.append(dataMat[i,1])  
  51.             ycord1.append(dataMat[i,2])  
  52.         else:  
  53.             xcord2.append(dataMat[i,1])  
  54.             ycord2.append(dataMat[i,2])  
  55.     plt.figure(1)  
  56.     ax=plt.subplot(111)  
  57.     ax.scatter(xcord1,ycord1,s=30,c='red',marker='s')  
  58.     ax.scatter(xcord2,ycord2,s=30,c='green')  
  59.     x=arange(0.2,0.8,0.1)  
  60.     y=array((-weights[0]-weights[1]*x)/weights[2])  
  61.     print shape(x)  
  62.     print shape(y)  
  63.     plt.sca(ax)  
  64.     plt.plot(x,y)      #ramdomgradAscent
  65.     #plt.plot(x,y[0])   #gradAscent
  66.     plt.xlabel('density')  
  67.     plt.ylabel('ratio_sugar')  
  68.     #plt.title('gradAscent logistic regression')
  69.     plt.title('ramdom gradAscent logistic regression')  
  70.     plt.show()  
  71. #weights=gradAscent(dataMat,labelMat)
  72. weights=randomgradAscent(dataMat,labelMat)  
  73. plotBestFit(weights)  
梯度上升法得到的結果如下:


隨機梯度上升法得到的結果如下:



可以看出,兩種方法的效果基本差不多。但是隨機梯度上升方法所需要的迭代次數要少很多。

3.4選擇兩個UCI資料集,比較10折交叉驗證法和留一法所估計出的對率迴歸的錯誤率。

UCI資料集: archive.ics.uci.edu/ml/

答:嫌麻煩所以沒弄。有興趣可以把資料下下來跑跑看

另外可以直接用sklearn做cv。更加方便

3.5 程式設計實現線性判別分析,並給出西瓜資料集3.0α上的結果

 答:

LDA的程式設計主要參考書上P62的3.39 以及P61的3.33這兩個式子。由於用公式可以直接算出,因此比較簡單

程式碼如下:

  1. # -*- coding: cp936 -*-
  2. from numpy import *  
  3. import numpy as np  
  4. import pandas as pd  
  5. import matplotlib.pyplot as plt  
  6. df=pd.read_csv('watermelon_3a.csv')  
  7. def calulate_w():  
  8.     df1=df[df.label==1]  
  9.     df2=df[df.label==0]  
  10.     X1=df1.values[:,1:3]  
  11.     X0=df2.values[:,1:3]  
  12.     mean1=array([mean(X1[:,0]),mean(X1[:,1])])  
  13.     mean0=array([mean(X0[:,0]),mean(X0[:,1])])  
  14.     m1=shape(X1)[0]  
  15.     sw=zeros(shape=(2,2))  
  16.     for i in range(m1):  
  17.         xsmean=mat(X1[i,:]-mean1)  
  18.         sw+=xsmean.transpose()*xsmean  
  19.     m0=shape(X0)[0]  
  20.     for i in range(m0):  
  21.         xsmean=mat(X0[i,:]-mean0)  
  22.         sw+=xsmean.transpose()*xsmean  
  23.     w=(mean0-mean1)*(mat(sw).I)  
  24.     return w  
  25. def plot(w):  
  26. 相關推薦

    機器學習--課後習題答案-線性模型

    3.1試分析在什麼情況下,在以下式子中不比考慮偏置項b。答:線上性迴歸中,所有引數的確定都是為了讓殘差項的均值為0且殘差項的平方和最小。在所有其他引數項確定後,偏置項b(或者說是常數項)的變化體現出來的就是擬合曲線的上下整體浮動,可以看做是其他各個解釋變數留下的bias的線性

    機器學習--課後習題答案5.5

    5.5 試程式設計實現標準BP演算法和累計BP演算法,在西瓜資料集3.0上分別用這兩個演算法訓練一個單隱層網路,並進行比較。 通過程式設計實踐發現,在本例下要達到某一限定的均方誤差時,標準BP演算法比累積BP演算法明顯收斂更快,特別在本例中,將ABP演算法誤差設定到0.0

    機器學習----課後習題3.3答案

    LR實現,訓練集和測試集都是書上給的西瓜資料集3.0α,用keras實現程式碼如下: # coding: utf-8 """ 使用keras實現logistic分類器 """ import os import gzip import urllib im

    機器學習-習題1.1,答案探究

    1.1版本空間 1.2 感覺上,可能的假設應當就是不同的版本空間,則對應瞭如圖1.2的3種版本空間 1.3 看不懂題目意思。設定閾值,或者排除異類後,按優先順序具有偏好。 1.4 不能理解,等回過頭來再看這題吧。

    機器學習.《14 概率圖模型

    目錄思維導圖轉載自:https://blog.csdn.net/liuyan20062010/article/details/72842007匯入:機器學習的核心價值觀:根據一些已觀察到的證據來推斷未知。其中基於概率的模型將學習任務歸結為計算變數的概率分佈;生成式模型:先對聯

    機器學習》()課後習題參考答案

     目錄: 參考:http://blog.csdn.net/snoopy_yuan/article/details/62045353 - 目錄 第一章 緒論 第二章 模型評估與選擇 第三章 線性模型 第四章 決策樹 [2016.12.20]決策樹代碼太亂,

    機器學習 課後習題3.3:程式設計實現對率迴歸,並給出西瓜資料集 3.0α 上的結果.

    資料如下: python 程式碼如下: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Tue Jan 30 10:05:01 2018 @author: llw """ #logistic r

    機器學習() 參考答案 第十六章 強化學習

    機器學習(周志華西瓜書) 參考答案 總目錄 是時候讓自己的機器更強大一些了,順便完結撒花 1.用於K-搖臂賭博機的UCB方法每次選擇Q(k)+UC(k)的最大的搖臂,其中Q(k)為搖臂k當前的平均獎賞,UC(k)為置信區間。例如Q(k)

    機器學習(西瓜書) 參考答案 總目錄

    機器學習(周志華西瓜書)參考答案總目錄 從剛開始學習機器學習到現在也有幾個月了,期間看過PDF,上過MOOC,總感覺知道一點了又不是特別明白,最後趁某東買書大減價弄了幾本相關的書來看看,其中一本就是西瓜書。一口氣看了前10章,感覺每章內容都很少,看完感覺還是和以前一樣。

    機器學習() 參考答案 第三章 線性模型 3.3

    一:matlab實現 1.資料的Excel處理 西瓜資料集3.0 2.程式碼 # -*- coding: utf-8 -*- old_l = 0; n = 0; b = [0;0;1]; %對應書中(3.25)下的B=(w;b),因為x有兩個屬性:

    機器學習() 參考答案 第一章 緒論

    機器學習(周志華) 參考答案 第一章 緒論 機器學習(周志華西瓜書) 參考答案 總目錄 1.表1.1中若只包含編號為1,4的兩個樣例,試給出相應的版本空間。 假設空間指的是問題所有假設組成的空間,我們可以把學習過程看作是在假設空間中搜索的過程,

    機器學習() 參考答案 第十四章 概率圖模型

    機器學習(周志華西瓜書) 參考答案 總目錄 1.試用盤式記法表示條件隨機場和樸素貝葉斯分類器。 條件隨機場: 這樣畫的問題在於無法表示N個y之間的關係,到底怎麼畫我也不知道。 樸素貝葉斯分類器:y依賴於所有的變數x 2.證明

    機器學習() 參考答案 第四章 決策樹 python重寫版與畫樹演算法

    機器學習(周志華西瓜書) 參考答案 總目錄 機器學習(周志華) 參考答案 第四章 決策樹 3.試程式設計實現基於資訊熵進行劃分選擇的決策樹演算法,併為表4.3中資料生成一棵決策樹。 最近在學著用python,所以用py重寫了以前的決策樹程式碼,

    機器學習() 參考答案 第二章 模型評估與選擇

    機器學習(周志華) 參考答案 第二章 模型評估與選擇 機器學習(周志華西瓜書) 參考答案 總目錄 1.資料集包含1000個樣本,其中500個正例,500個反例,將其劃分為包含70%樣本的訓練集和30%樣本的測試集用於留出法評估,試估算共有多少種

    機器學習 第一章習題

    1.表1.1中若只包含編號為1,4的兩個樣例,試給出相應的版本空間。 假設資料集有n種屬性,第i個屬性可能的取值有ti種,加上該屬性的泛化取值(*),所以可能的假設有 ∏_i(t_i+1) 再用空集表示沒有正例,假設空間中一共 ∏i(ti+1)

    機器學習() 參考答案 第十五章 規則學習

    機器學習(周志華西瓜書) 參考答案 總目錄 好忙啊好忙啊好忙啊,這章和我的研究方向關係不大,暫時先偷工減料一下下。 1.對西瓜資料集2.0,允許使用否定形式的文字,試基於自頂向下的策略學出命題規則集。 1,2題共同的問題是,如

    機器學習(西瓜書) 參考答案 總目錄 轉載至https://blog.csdn.net/icefire_tyh/article/details/52064910

    機器學習(周志華西瓜書)參考答案總目錄 從剛開始學習機器學習到現在也有幾個月了,期間看過PDF,上過MOOC,總感覺知道一點了又不是特別明白,最後趁某東買書大減價弄了幾本相關的書來看看,其中一本就是西瓜書。一口氣看了前10章,感覺每章內容都很少,看完感覺還是和

    機器學習() 習題7.3 個人筆記

    7.3 試程式設計實現拉普拉斯修正的樸素貝葉斯分類器,並以西瓜資料集3.0為訓練集,對p151“測1”樣本進行判別。 程式設計得到結果為: [0.024223607117715082, 4.4242506192749345e-05] 因此測試例應預測為好瓜。 # -*-

    機器學習() 參考答案 第一章 緒論 1.2

    機器學習(周志華) 參考答案 第一章 緒論 1.2 機器學習(周志華西瓜書) 參考答案 總目錄 機器學習(周志華) 參考答案 第一章 緒論 2.與使用單個合取式來進行假設表示相比,使用“析合正規化”將使得假設空間具有更強的表示能力。若使用

    機器學習--第一章

    緒論 1.1 引言 什麼是機器學習? 它是一門致力於研究如何通過計算的手段,利用經驗來改善系統自身效能的一門學科。所研究的主要內容是計算機如何通過資料產生模型,即學習演算法。有了學習演算法後,當我們給它提供經驗資料時就能基於這些資料產生模型。在面對新資料時學習演算法會給我們相應的判斷。經驗通常以資料的形