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

熱線電話:13121318867

登錄
首頁精彩閱讀利用R語言如何判別和分類
利用R語言如何判別和分類
2018-01-21
收藏

利用R語言如何判別和分類

判別分析(discriminant analysis)是一種分類技術(shù)。它通過一個(gè)已知類別的“訓(xùn)練樣本”來建立判別準(zhǔn)則,并通過預(yù)測變量來為未知類別的數(shù)據(jù)進(jìn)行分類。
     判別分析根據(jù)所采用的數(shù)據(jù)模型,可分為線性判別分析和非線性判別分析。根據(jù)判別準(zhǔn)則可分為Fisher判別、Bayes判別和距離判別。其中最基本的Fisher判別方法也被稱為線性判別方法。該方法的主要思想是將多維數(shù)據(jù)投影到某個(gè)方向上,投影的原則是將總體與總體盡可能的分開,然后再選擇合適的判別規(guī)則將新的樣本分類判別。Fisher判別會(huì)投影降維,使多維問題簡化為一維問題來處理。選擇一個(gè)適當(dāng)?shù)耐队拜S,使所有的樣品點(diǎn)都投影到這個(gè)軸上得到一個(gè)投影值。對這個(gè)投影軸的方向的要求是:使每一組內(nèi)的投影值所形成的組內(nèi)離差盡可能小,而不同組間的投影值所形成的類間離差盡可能大。Bayes判別思想是根據(jù)先驗(yàn)概率求出后驗(yàn)概率,并依據(jù)后驗(yàn)概率分布作出統(tǒng)計(jì)推斷。距離判別思想是根據(jù)已知分類的數(shù)據(jù)計(jì)算各類別的重心,對未知分類的數(shù)據(jù),計(jì)算它與各類重心的距離,與某個(gè)重心距離最近則歸于該類。

1.線性判別
    當(dāng)不同類樣本的協(xié)方差矩陣相同時(shí),我們可以在R中使用MASS包的lda函數(shù)實(shí)現(xiàn)線性判別。值得注意的是當(dāng)分類只有兩種且總體服從多元正態(tài)分布條件下,Bayes判別與Fisher判別、距離判別是等價(jià)的。利用table函數(shù)建立混淆矩陣,比對真實(shí)類別和預(yù)測類別。
> library(MASS)
> data(iris)
> iris.lda=lda(Species~.,data=iris)
> table(Species,predict(iris.lda,iris)$class)
            
Species setosa versicolor virginica
  setosa 50 0 0
  versicolor 0 48 2
  virginica 0 1 49
> table<-table(Species,predict(iris.lda,iris)$class)
> sum(diag(prop.table(table)))###判對率
[1] 0.98
  2.二次判別
當(dāng)不同類樣本的協(xié)方差矩陣不同時(shí),則應(yīng)該使用二次判別。在使用lda和qda函數(shù)時(shí)注意:其假設(shè)是總體服從多元正態(tài)分布,若不滿足的話則謹(jǐn)慎使用二次判別。
> iris.qda=qda(Species~.,data=iris,cv=T)
> table(Species,predict(iris.qda,iris)$class)
            
Species setosa versicolor virginica
  setosa 50 0 0
  versicolor 0 48 2
  virginica 0 1 49
> table<-table(Species,predict(iris.qda,iris)$class)
> sum(diag(prop.table(table)))###判對率
[1] 0.98
3.貝葉斯判別
貝葉斯判別式假定對研究對象已有一定的認(rèn)識 這種認(rèn)識常用先驗(yàn)概率來描述,當(dāng)取得樣本后就可以用樣本來修正已經(jīng)有的先驗(yàn)概率分布得出后驗(yàn)概率分布,然后通過后驗(yàn)概率分布進(jìn)行各種統(tǒng)計(jì)推。實(shí)際上就是使平均誤判損失(誤判概率與誤判損失的結(jié)合)ECM達(dá)到極小的過程。
> library(MASS)
> data(iris)
> iris.Beyes=lda(Species~.,data=iris,prior=c(1,1,1)/3)
> table(Species,predict(iris.Beyes,iris)$class)
            
Species setosa versicolor virginica
  setosa 50 0 0
  versicolor 0 48 2
  virginica 0 1 49
> table<-table(Species,predict(iris.Beyes,iris)$class)
> sum(diag(prop.table(table)))###判對率
[1] 0.98
上面是先驗(yàn)概率相等的情形,下面介紹先驗(yàn)概率不等的情形
> iris.Beyes1=lda(Species~.,data=iris,prior=c(7,8,15)/30)
> table(Species,predict(iris.Beyes1,iris)$class)
            
Species setosa versicolor virginica
  setosa 50 0 0
  versicolor 0 48 2
  virginica 0 1 49
> table<-table(Species,predict(iris.Beyes1,iris)$class)
> sum(diag(prop.table(table)))###判對率
[1] 0.98
判別分析是半監(jiān)督分類,就是判別函數(shù)求解的時(shí)候按照已知類別樣本計(jì)算,但是對于未知類別樣本應(yīng)用判別函數(shù)時(shí)不做任何監(jiān)督。;而決策樹神經(jīng)網(wǎng)絡(luò)等方法屬于有監(jiān)督分類,從分類準(zhǔn)則建立,到準(zhǔn)則的部署全程控制。訓(xùn)練神經(jīng)網(wǎng)絡(luò)決策樹是監(jiān)督學(xué)習(xí)的最常見技術(shù)。這兩種技術(shù)(神經(jīng)網(wǎng)絡(luò)決策樹)高度依賴于事先確定的分類系統(tǒng)給出的信息。對于神經(jīng)網(wǎng)絡(luò)來說,分類系統(tǒng)用于判斷網(wǎng)絡(luò)的錯(cuò)誤,然后調(diào)整網(wǎng)絡(luò)適應(yīng)它;對于決策樹,分類系統(tǒng)用來判斷哪些屬性提供了最多的信息,如此一來可以用它解決分類系統(tǒng)的問題。
下面就介紹幾種有監(jiān)督分類方法
4.利用決策樹分類
決策樹是以實(shí)例為基礎(chǔ)的歸納學(xué)習(xí)算法。它從一組無次序、無規(guī)則的元組中推理出決策樹表示形式的分類規(guī)則。 它采用自頂向下的遞歸方式,在決策樹的內(nèi)部結(jié)點(diǎn)進(jìn)行屬性值的比較,并根據(jù)不同的屬性值從該結(jié)點(diǎn)向下分支,葉結(jié)點(diǎn)是要學(xué)習(xí)劃分的類。從根到葉結(jié)點(diǎn)的一條路徑就對應(yīng)著一條合取規(guī)則,整個(gè)決策樹就對應(yīng)著一組析取表達(dá)式規(guī)則。
> library(tree)
> set.seed(2)
> data(iris)
> train=sample(1:nrow(iris),100)
> iris.test=iris[-train,]
> tree.Species=tree(Species~.,iris,subset=train)
> tree.pred=predict(tree.Species,iris.test,type='class')
> table(tree.pred,iris.test$Species)
            
tree.pred setosa versicolor virginica
  setosa 15 0 0
  versicolor 0 16 0
  virginica 0 1 18
> table<-table(tree.pred,iris.test$Species)
> sum(diag(prop.table(table)))###判對率
[1] 0.98
5.利用神經(jīng)網(wǎng)絡(luò)分類
神經(jīng)網(wǎng)絡(luò)建立在有自學(xué)習(xí)能力的數(shù)學(xué)模型基礎(chǔ)上,可以對復(fù)雜的數(shù)據(jù)進(jìn)行分析,并完成對人腦或其他計(jì)算機(jī)來說極為復(fù)雜的模式抽取及趨勢分析。神經(jīng)網(wǎng)絡(luò)的典型應(yīng)用是建立分類模型。神經(jīng)網(wǎng)絡(luò)從經(jīng)驗(yàn)中學(xué)習(xí),常用于發(fā)現(xiàn)一組輸入數(shù)據(jù)和一個(gè)結(jié)果之間的未知聯(lián)系神經(jīng)網(wǎng)絡(luò)的訓(xùn)練是根據(jù)歷史樣本數(shù)據(jù)反復(fù)進(jìn)行的。訓(xùn)練過程中,處理單元對數(shù)據(jù)進(jìn)行匯總和轉(zhuǎn)換,它們之間的連接被賦以不同的權(quán)值。也就是說,為了對每一個(gè)樣本的結(jié)果變量進(jìn)行預(yù)測,一個(gè)網(wǎng)絡(luò)要嘗試各種不同的方案。當(dāng)輸出結(jié)果在指定的精度級別上與已知結(jié)果吻合,或滿足其它的結(jié)束準(zhǔn)則時(shí),網(wǎng)絡(luò)的訓(xùn)練就不再進(jìn)行
> library(nnet)
> set.seed(2)
> data(iris)
> iris.nnet <-nnet(Species ~ ., linout = F,size = 10, decay = 0.01, maxit = 1000,trace = F,data = iris)
#對分類數(shù)據(jù)預(yù)測需要加上type參數(shù)
> pre.forest=predict(iris.nnet, iris,type='class')
> table(pre.forest,iris$Species)
            
pre.forest setosa versicolor virginica
  setosa 50 0 0
  versicolor 0 49 0
  virginica 0 1 50
> table<-table(pre.forest,iris$Species)
> sum(diag(prop.table(table)))###判對率
[1] 0.9933333
6.利用支持向量機(jī)分類、
SVM學(xué)習(xí)問題可以表示為凸優(yōu)化問題,因此可以利用已知的有效算法發(fā)現(xiàn)目標(biāo)函數(shù)的全局最小值。而其他分類方法(如基于規(guī)則的分類器和人工神經(jīng)網(wǎng)絡(luò))都采用一種基于貪心學(xué)習(xí)的策略來搜索假設(shè)空間,這種方法一般只能獲得局部最優(yōu)解。 SVM通過最大化決策邊界的邊緣來控制模型的能力。盡管如此,用戶必須提供其他參數(shù),如使用核函數(shù)類型和引入松弛變量等。通過對數(shù)據(jù)中每個(gè)分類屬性引入一個(gè)啞變量,SVM可以應(yīng)用于分類數(shù)據(jù)。SVM一般只能用在二類問題,對于多類問題效果不好。
> library(e1071)
> set.seed(2)
> data(iris)
> iris.svm <-svm(Species ~ .,data = iris)
> pre.forest=predict(iris.svm, iris,type='class')
> table(pre.forest,iris$Species)
            
pre.forest setosa versicolor virginica
  setosa 50 0 0
  versicolor 0 48 2
  virginica 0 2 48
> table<-table(pre.forest,iris$Species)
> sum(diag(prop.table(table)))###判對率
[1] 0.9733333
7.基于距離的分類算法
K—最臨近方法(k Nearest Neighbors,簡稱KNN)是實(shí)際運(yùn)用中經(jīng)常被采用的一種基于距離的分類算法。KNN算法的基本思想:假定每個(gè)類包含多個(gè)訓(xùn)練數(shù)據(jù),且每個(gè)訓(xùn)練數(shù)據(jù)都有一個(gè)唯一的類別標(biāo)記,計(jì)算每個(gè)訓(xùn)練數(shù)據(jù)到待分類元組的距離,取和待分類元組距離最近的k個(gè)訓(xùn)練數(shù)據(jù),k個(gè)數(shù)據(jù)中哪個(gè)類別的訓(xùn)練數(shù)據(jù)占多數(shù),則待分類元組就屬于哪個(gè)類別。工作原理:我們知道樣本集中每一個(gè)數(shù)據(jù)與所屬分類的對應(yīng)關(guān)系,輸入沒有標(biāo)簽的新數(shù)據(jù)后,將新數(shù)據(jù)與訓(xùn)練集的數(shù)據(jù)對應(yīng)特征進(jìn)行比較,找出“距離”最近的k(通常k<20)數(shù)據(jù),選擇這k個(gè)數(shù)據(jù)中出現(xiàn)最多的分類作為新數(shù)據(jù)的分類。
> library(kknn)
> data(iris)
> m <- dim(iris)[1]
> val <- sample(1:m, size =round(m/3), replace = FALSE, prob= rep(1/m, m)) ##隨機(jī)選出訓(xùn)練集合
> iris.train <- iris[-val,]
> iris.test <- iris[val,]
> iris.kknn <- kknn(Species~.,iris.train, iris.test, distance = 5, kernel= "triangular")
> fit <- fitted(iris.kknn)
> table(iris.test$Species, fit)
            fit
             setosa versicolor virginica
  setosa 15 0 0
  versicolor 0 15 1
  virginica 0 2 17
> table<-table(iris.test$Species, fit)
> sum(diag(prop.table(table)))
[1] 0.94
8.利用logistic回歸分類
logistic回歸與多重線性回歸實(shí)際上有很多相同之處,最大的區(qū)別就在于他們的因變量不同,其他的基本都差不多,正是因?yàn)槿绱?,這兩種回歸可以歸于同一個(gè)家族,即廣義線性模型(generalized linear model)。這一家族中的模型形式基本上都差不多,不同的就是因變量不同,如果是連續(xù)的,就是多重線性回歸,如果是二項(xiàng)分布,就是logistic回歸。logistic回歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更為常用,也更加容易解釋。
> library(nnet)
> data(iris)
> set.seed(2)
> train=sample(1:nrow(iris),100)
> iris.train=iris[train,]
> iris.test=iris[-train,]
> iris.logistic<- multinom(Species~., data = iris.train)
# weights: 18 (10 variable)
initial value 109.861229
iter 10 value 15.748434
iter 20 value 3.075288
iter 30 value 1.783451
iter 40 value 1.757924
iter 50 value 1.745571
iter 60 value 1.726390
iter 70 value 1.601147
iter 80 value 1.578286
iter 90 value 1.553331
iter 100 value 1.540946
final value 1.540946
stopped after 100 iterations
> summary(iris.logistic)
Call:
multinom(formula = Species ~ ., data = iris.train)

Coefficients:
           (Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width
versicolor 72.06357 -8.35714 -25.59577 23.57554 -18.06928
virginica -75.84817 -15.20983 -49.04539 50.74856 53.25676

Std. Errors:
           (Intercept) Sepal.Length Sepal.Width Petal.Length Petal.Width
versicolor 92.54313 54.78403 108.3836 211.6267 133.9626
virginica 106.83040 57.99244 114.7649 217.0620 148.1710

Residual Deviance: 3.081893
AIC: 23.08189
> iris.pre<-predict(iris.logistic,iris.test,type="class")
> table(iris.pre,iris.test$Species)
            
iris.pre setosa versicolor virginica
  setosa 14 0 0
  versicolor 1 17 2
  virginica 0 0 16
> table<-table(iris.pre,iris.test$Species)
> sum(diag(prop.table(table)))

[1] 0.94


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

若不方便掃碼,搜微信號: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)證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗(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ù)說明請參見: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 = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+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); }