99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀R語言中的線性判別分析_r語言 線性判別分析
R語言中的線性判別分析_r語言 線性判別分析
2016-12-19
收藏

R語言中的線性判別分析_r語言 線性判別分析

R語言中,線性判別分析(Liner Discriminant Analysis,簡稱LDA),依靠軟件包MASS中有線性判別函數(shù)lqa()來實(shí)現(xiàn)。該函數(shù)有三種調(diào)用格式:

1)當(dāng)對(duì)象為數(shù)據(jù)框data.frame時(shí)

lda(x,grouping,prior = propotions,tol = 1.0e-4,method,CV = FALSE,nu,…)

2) 當(dāng)對(duì)象為公式Formula時(shí)

lda(formula,data,…,subnet,na.action)

3) 當(dāng)對(duì)象為矩陣Matrix時(shí)

lda(x,group,…,subnet,na.action)

對(duì)于第一種情況,grouping表示每個(gè)觀測樣本的所屬類別;

prior表示各類別的先驗(yàn)概率,默認(rèn)取訓(xùn)練集中各樣本的比例;

tol表示篩選變量,默認(rèn)取0.0001

對(duì)于第二種情況,formula表示判別公式,比如,y~x1+x2+x3,或者y~x1*x1

data表示數(shù)據(jù)集

subnet表示樣本

na.action表示處理缺失值的方法,默認(rèn)為“如果樣本中有缺失值,則lda()函數(shù)無法運(yùn)行”;如果設(shè)置為na.omit,則表示“自動(dòng)刪除樣本中的缺失值,然后,進(jìn)行計(jì)算”

對(duì)于第三種情況,x表示矩陣 

data表示數(shù)據(jù)集

subnet表示樣本

na.action表示處理缺失值的方法,默認(rèn)為“如果樣本中有缺失值,則lda()函數(shù)無法運(yùn)行”;如果設(shè)置為na.omit,則表示“自動(dòng)刪除樣本中的缺失值,然后,進(jìn)行計(jì)算”

下面,舉一個(gè)例子,來說明線性判別分析。我們選用kknn軟件包中的miete數(shù)據(jù)集進(jìn)行算法演示。miete數(shù)據(jù)集記錄了1994年慕尼黑的住房傭金標(biāo)準(zhǔn)中一些有趣變量,比如房子的面積、是否有浴室、是否有中央供暖、是否供應(yīng)熱水等等,這些因素都影響著傭金的高低。

1.數(shù)據(jù)概況

首先,簡單了解一下,miete數(shù)據(jù)集。

> library(kknn) > data(miete) > head(miete)

nm wfl     bj bad0 zh ww0 badkach fenster kueche mvdauer bjkat wflkat
1  693.29  50 1971.5    0  1   0       0       0      0       2     4      1
2  736.60  70 1971.5    0  1   0       0       0      0      26     4      2
3  732.23  50 1971.5    0  1   0       0       0      0       1     4      1
4 1295.14  55 1893.0    0  1   0       0       0      0       0     1      2
5  394.97  46 1957.0    0  0   1       0       0      0      27     3      1
6 1285.64  94 1971.5    0  1   0       1       0      0       2     4      3
nmqm rooms nmkat adr wohn
1 13.865800     1     3   2    2
2 10.522857     3     3   2    2
3 14.644600     1     3   2    2
4 23.548000     3     5   2    2
5  8.586304     3     1   2    2
6 13.677021     4     5   2    2

> dim(miete)

[1] 1082   17

我們看到,該數(shù)據(jù)集一共有1082條樣本,和17個(gè)變量。下面,我們利用summary()來查看變量的信息。


> summary(miete)

nm              wfl               bj       bad0     zh      ww0     

Min.   : 127.1   Min.   : 20.00   Min.   :1800   0:1051   0:202   0:1022
1st Qu.: 543.6   1st Qu.: 50.25   1st Qu.:1934   1:  31   1:880   1:  60
Median : 746.0   Median : 67.00   Median :1957
Mean   : 830.3   Mean   : 69.13   Mean   :1947
3rd Qu.:1030.0   3rd Qu.: 84.00   3rd Qu.:1972
Max.   :3130.0   Max.   :250.00   Max.   :1992
badkach fenster  kueche     mvdauer      bjkat   wflkat       nmqm
0:446   0:1024   0:980   Min.   : 0.00   1:218   1:271   Min.   : 1.573
1:636   1:  58   1:102   1st Qu.: 2.00   2:154   2:513   1st Qu.: 8.864
Median : 6.00   3:341   3:298   Median :12.041
Mean   :10.63   4:226           Mean   :12.647
3rd Qu.:17.00   5: 79           3rd Qu.:16.135
Max.   :82.00   6: 64           Max.   :35.245
rooms       nmkat   adr      wohn
Min.   :1.000   1:219   1:  25   1: 90
1st Qu.:2.000   2:230   2:1035   2:673
Median :3.000   3:210   3:  22   3:319
Mean   :2.635   4:208
3rd Qu.:3.000   5:215
Max.   :9.000                           

我們可以選擇nmkat(凈租金)作為 待判別變量—一是,由于該變量在含義上容易受其他變量影響,為被解釋變量;二是,nmkat自身就有5個(gè)等級(jí)類別,其相應(yīng)的樣本量依次為 219、230、210、208、215,即每一類的樣本量都為200個(gè)左右,分布比較均勻。

2.數(shù)據(jù)預(yù)處理

下面,我們將miete數(shù)據(jù)集,分為訓(xùn)練集和測試集。

為了提高判別效果,我們考慮采用分層抽樣的方式,由于miete數(shù)據(jù)集中,待判別變量nmkat的5個(gè)等級(jí)分布比較均勻,因此采用5個(gè)等級(jí)按等量抽取樣本。(如果分布不均勻,則采用按比例抽取樣本)。具體如下:


> library(sampling) > n = round(2/3*nrow(miete)/5) > n

[1] 144

可以看到,訓(xùn)練集占總樣本的2/3,測試集占總樣本的1/3,從訓(xùn)練集中nmkat變量的每一個(gè)等級(jí)抽取的樣本數(shù)是144個(gè)。


> #以nmkat變量的5個(gè)等級(jí)劃分層次,進(jìn)行分層抽樣 > sub_train = strata(miete,stratanames = "nmkat",size=rep(n,5),method="srswor") > head(sub_train)

#顯示訓(xùn)練集抽取的情況,包括nmkat變量取值、該樣本在數(shù)據(jù)集中的序號(hào)、被抽取的概率、以及被抽取的層次。

nmkat ID_unit      Prob Stratum
1      3       1 0.6857143       1
2      3       2 0.6857143       1
3      3       3 0.6857143       1
16     3      16 0.6857143       1
20     3      20 0.6857143       1
22     3      22 0.6857143       1

>


> #獲取如上ID_unit所對(duì)應(yīng)的樣本構(gòu)成訓(xùn)練集,并刪除變量1、3、12 > data_train = getdata(miete[,c(-1,-3,-12)],sub_train$ID_unit) > data_test = getdata(miete[,c(-1,-3,-12)],-sub_train$ID_unit) > dim(data_train); dim(data_test) #分別顯示訓(xùn)練集、測試集的維度

[1] 720  14
[1] 362  14

> head(data_test)

wfl bad0 zh ww0 badkach fenster kueche mvdauer bjkat      nmqm rooms nmkat
7   28    0  1   0       0       1      1       9     4 17.011071     1     1
8   36    0  1   0       0       0      1       3     4 19.710278     1     3
9   33    0  1   0       0       0      0       1     4 25.840606     1     4
10  57    0  1   0       1       0      1       9     6 11.534035     2     2
11  75    0  1   0       1       0      1       3     6 16.504533     3     5
17  79    0  1   0       0       0      0      20     4  7.507215     3     2
adr wohn
7    2    2
8    2    2
9    2    2
10   2    2
11   2    2
17   2    2

至此,數(shù)據(jù)理解和數(shù)據(jù)預(yù)處理過程結(jié)束,得到可以直接使用的訓(xùn)練集data_train和測試集data_test。

3.線性判別
這里使用公式formula格式,進(jìn)行判別。首先要加載軟件包MASS,接著使用nmkat作為待判別變量,其他變量作為特征變量,根據(jù)公式nmkat~. (如果變量為y,則公式為y~. ) ,使用訓(xùn)練集data_train來運(yùn)行 lda()函數(shù)。

> library(MASS) > fit_lda1 = lda(nmkat~., data_train) #以公式格式進(jìn)行線性判別 > names(fit_lda1) > fit_lda1$prior

1   2   3   4   5 

0.2 0.2 0.2 0.2 0.2 

我們可以看到,各類別的先驗(yàn)概率在5個(gè)等級(jí)中都為0.2,之和為1,即它們都相等,這與它們分別均勻?qū)?yīng)。

> fit_lda1$means

wfl       bad01       zh1        ww01  badkach1   fenster1    kueche1
1 54.87500 0.055555556 0.6041667 0.138888889 0.3888889 0.06944444 0.04166667
2 60.59722 0.013888889 0.8125000 0.027777778 0.5486111 0.08333333 0.04166667
3 66.76389 0.013888889 0.8194444 0.041666667 0.5208333 0.06944444 0.07638889
4 74.70833 0.013888889 0.8750000 0.041666667 0.6458333 0.03472222 0.07638889
5 90.10417 0.006944444 0.9375000 0.006944444 0.7708333 0.04166667 0.20833333
mvdauer     bjkat.L      bjkat.Q      bjkat.C    bjkat^4     bjkat^5
1 14.444444 -0.21580517 -0.104562739  0.031056500 0.17323372 -0.17585847
2 11.923611 -0.12450298 -0.211398581 -0.002588042 0.20604313 -0.12642562
3 11.847222 -0.12782306 -0.145478593  0.049690399 0.16273470 -0.07349309
4 10.347222 -0.08964215 -0.127293769 -0.035197366 0.12861291  0.01137393
5  5.333333 -0.04482107 -0.009092412  0.018633900 0.02624753 -0.01574852
nmqm    rooms        adr.L      adr.Q     wohn.L     wohn.Q
1  8.231574 2.173611 -0.019641855 -0.7654655 0.03437325 -0.3997431
2 10.988627 2.416667 -0.034373246 -0.7569604 0.08838835 -0.4252586
3 12.495436 2.597222 -0.019641855 -0.7654655 0.11294067 -0.3487121
4 14.107342 2.861111  0.004910464 -0.7909811 0.16695577 -0.3912379
5 17.108865 3.250000  0.019641855 -0.7484552 0.27498597 -0.2041241

從上面的結(jié)果中,可以看到一些很能反映現(xiàn)實(shí)情況的數(shù)據(jù)特征。比如,住房面積wfl變量,它明顯隨著租金nmkat的升高而逐步提高。這與我們的常識(shí)“房子的面積越大,租金就越貴”是十分吻合的。


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }