
利用R語(yǔ)言如何判別和分類(lèi)
判別分析(discriminant analysis)是一種分類(lèi)技術(shù)。它通過(guò)一個(gè)已知類(lèi)別的“訓(xùn)練樣本”來(lái)建立判別準(zhǔn)則,并通過(guò)預(yù)測(cè)變量來(lái)為未知類(lèi)別的數(shù)據(jù)進(jìn)行分類(lèi)。
判別分析根據(jù)所采用的數(shù)據(jù)模型,可分為線性判別分析和非線性判別分析。根據(jù)判別準(zhǔn)則可分為Fisher判別、Bayes判別和距離判別。其中最基本的Fisher判別方法也被稱(chēng)為線性判別方法。該方法的主要思想是將多維數(shù)據(jù)投影到某個(gè)方向上,投影的原則是將總體與總體盡可能的分開(kāi),然后再選擇合適的判別規(guī)則將新的樣本分類(lèi)判別。Fisher判別會(huì)投影降維,使多維問(wèn)題簡(jiǎn)化為一維問(wèn)題來(lái)處理。選擇一個(gè)適當(dāng)?shù)耐队拜S,使所有的樣品點(diǎn)都投影到這個(gè)軸上得到一個(gè)投影值。對(duì)這個(gè)投影軸的方向的要求是:使每一組內(nèi)的投影值所形成的組內(nèi)離差盡可能小,而不同組間的投影值所形成的類(lèi)間離差盡可能大。Bayes判別思想是根據(jù)先驗(yàn)概率求出后驗(yàn)概率,并依據(jù)后驗(yàn)概率分布作出統(tǒng)計(jì)推斷。距離判別思想是根據(jù)已知分類(lèi)的數(shù)據(jù)計(jì)算各類(lèi)別的重心,對(duì)未知分類(lèi)的數(shù)據(jù),計(jì)算它與各類(lèi)重心的距離,與某個(gè)重心距離最近則歸于該類(lèi)。
1.線性判別
當(dāng)不同類(lèi)樣本的協(xié)方差矩陣相同時(shí),我們可以在R中使用MASS包的lda函數(shù)實(shí)現(xiàn)線性判別。值得注意的是當(dāng)分類(lèi)只有兩種且總體服從多元正態(tài)分布條件下,Bayes判別與Fisher判別、距離判別是等價(jià)的。利用table函數(shù)建立混淆矩陣,比對(duì)真實(shí)類(lèi)別和預(yù)測(cè)類(lèi)別。
> 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)))###判對(duì)率
[1] 0.98
2.二次判別
當(dāng)不同類(lèi)樣本的協(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)))###判對(duì)率
[1] 0.98
3.貝葉斯判別
貝葉斯判別式假定對(duì)研究對(duì)象已有一定的認(rèn)識(shí) 這種認(rèn)識(shí)常用先驗(yàn)概率來(lái)描述,當(dāng)取得樣本后就可以用樣本來(lái)修正已經(jīng)有的先驗(yàn)概率分布得出后驗(yàn)概率分布,然后通過(guò)后驗(yàn)概率分布進(jìn)行各種統(tǒng)計(jì)推。實(shí)際上就是使平均誤判損失(誤判概率與誤判損失的結(jié)合)ECM達(dá)到極小的過(guò)程。
> 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)))###判對(duì)率
[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)))###判對(duì)率
[1] 0.98
判別分析是半監(jiān)督分類(lèi),就是判別函數(shù)求解的時(shí)候按照已知類(lèi)別樣本計(jì)算,但是對(duì)于未知類(lèi)別樣本應(yīng)用判別函數(shù)時(shí)不做任何監(jiān)督。;而決策樹(shù)和神經(jīng)網(wǎng)絡(luò)等方法屬于有監(jiān)督分類(lèi),從分類(lèi)準(zhǔn)則建立,到準(zhǔn)則的部署全程控制。訓(xùn)練神經(jīng)網(wǎng)絡(luò)和決策樹(shù)是監(jiān)督學(xué)習(xí)的最常見(jiàn)技術(shù)。這兩種技術(shù)(神經(jīng)網(wǎng)絡(luò)和決策樹(shù))高度依賴(lài)于事先確定的分類(lèi)系統(tǒng)給出的信息。對(duì)于神經(jīng)網(wǎng)絡(luò)來(lái)說(shuō),分類(lèi)系統(tǒng)用于判斷網(wǎng)絡(luò)的錯(cuò)誤,然后調(diào)整網(wǎng)絡(luò)適應(yīng)它;對(duì)于決策樹(shù),分類(lèi)系統(tǒng)用來(lái)判斷哪些屬性提供了最多的信息,如此一來(lái)可以用它解決分類(lèi)系統(tǒng)的問(wèn)題。
下面就介紹幾種有監(jiān)督分類(lèi)方法
4.利用決策樹(shù)分類(lèi)
決策樹(shù)是以實(shí)例為基礎(chǔ)的歸納學(xué)習(xí)算法。它從一組無(wú)次序、無(wú)規(guī)則的元組中推理出決策樹(shù)表示形式的分類(lèi)規(guī)則。 它采用自頂向下的遞歸方式,在決策樹(shù)的內(nèi)部結(jié)點(diǎn)進(jìn)行屬性值的比較,并根據(jù)不同的屬性值從該結(jié)點(diǎn)向下分支,葉結(jié)點(diǎn)是要學(xué)習(xí)劃分的類(lèi)。從根到葉結(jié)點(diǎn)的一條路徑就對(duì)應(yīng)著一條合取規(guī)則,整個(gè)決策樹(shù)就對(duì)應(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)))###判對(duì)率
[1] 0.98
5.利用神經(jīng)網(wǎng)絡(luò)分類(lèi)
神經(jīng)網(wǎng)絡(luò)建立在有自學(xué)習(xí)能力的數(shù)學(xué)模型基礎(chǔ)上,可以對(duì)復(fù)雜的數(shù)據(jù)進(jìn)行分析,并完成對(duì)人腦或其他計(jì)算機(jī)來(lái)說(shuō)極為復(fù)雜的模式抽取及趨勢(shì)分析。神經(jīng)網(wǎng)絡(luò)的典型應(yīng)用是建立分類(lèi)模型。神經(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)練過(guò)程中,處理單元對(duì)數(shù)據(jù)進(jìn)行匯總和轉(zhuǎn)換,它們之間的連接被賦以不同的權(quán)值。也就是說(shuō),為了對(duì)每一個(gè)樣本的結(jié)果變量進(jìn)行預(yù)測(cè),一個(gè)網(wǎng)絡(luò)要嘗試各種不同的方案。當(dāng)輸出結(jié)果在指定的精度級(jí)別上與已知結(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)
#對(duì)分類(lèi)數(shù)據(jù)預(yù)測(cè)需要加上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)))###判對(duì)率
[1] 0.9933333
6.利用支持向量機(jī)分類(lèi)、
SVM學(xué)習(xí)問(wèn)題可以表示為凸優(yōu)化問(wèn)題,因此可以利用已知的有效算法發(fā)現(xiàn)目標(biāo)函數(shù)的全局最小值。而其他分類(lèi)方法(如基于規(guī)則的分類(lèi)器和人工神經(jīng)網(wǎng)絡(luò))都采用一種基于貪心學(xué)習(xí)的策略來(lái)搜索假設(shè)空間,這種方法一般只能獲得局部最優(yōu)解。 SVM通過(guò)最大化決策邊界的邊緣來(lái)控制模型的能力。盡管如此,用戶(hù)必須提供其他參數(shù),如使用核函數(shù)類(lèi)型和引入松弛變量等。通過(guò)對(duì)數(shù)據(jù)中每個(gè)分類(lèi)屬性引入一個(gè)啞變量,SVM可以應(yīng)用于分類(lèi)數(shù)據(jù)。SVM一般只能用在二類(lèi)問(wèn)題,對(duì)于多類(lèi)問(wèn)題效果不好。
> 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)))###判對(duì)率
[1] 0.9733333
7.基于距離的分類(lèi)算法
K—最臨近方法(k Nearest Neighbors,簡(jiǎn)稱(chēng)KNN)是實(shí)際運(yùn)用中經(jīng)常被采用的一種基于距離的分類(lèi)算法。KNN算法的基本思想:假定每個(gè)類(lèi)包含多個(gè)訓(xùn)練數(shù)據(jù),且每個(gè)訓(xùn)練數(shù)據(jù)都有一個(gè)唯一的類(lèi)別標(biāo)記,計(jì)算每個(gè)訓(xùn)練數(shù)據(jù)到待分類(lèi)元組的距離,取和待分類(lèi)元組距離最近的k個(gè)訓(xùn)練數(shù)據(jù),k個(gè)數(shù)據(jù)中哪個(gè)類(lèi)別的訓(xùn)練數(shù)據(jù)占多數(shù),則待分類(lèi)元組就屬于哪個(gè)類(lèi)別。工作原理:我們知道樣本集中每一個(gè)數(shù)據(jù)與所屬分類(lèi)的對(duì)應(yīng)關(guān)系,輸入沒(méi)有標(biāo)簽的新數(shù)據(jù)后,將新數(shù)據(jù)與訓(xùn)練集的數(shù)據(jù)對(duì)應(yīng)特征進(jìn)行比較,找出“距離”最近的k(通常k<20)數(shù)據(jù),選擇這k個(gè)數(shù)據(jù)中出現(xiàn)最多的分類(lèi)作為新數(shù)據(jù)的分類(lèi)。
> 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回歸分類(lèi)
logistic回歸與多重線性回歸實(shí)際上有很多相同之處,最大的區(qū)別就在于他們的因變量不同,其他的基本都差不多,正是因?yàn)槿绱耍@兩種回歸可以歸于同一個(gè)家族,即廣義線性模型(generalized linear model)。這一家族中的模型形式基本上都差不多,不同的就是因變量不同,如果是連續(xù)的,就是多重線性回歸,如果是二項(xiàng)分布,就是logistic回歸。logistic回歸的因變量可以是二分類(lèi)的,也可以是多分類(lèi)的,但是二分類(lèi)的更為常用,也更加容易解釋。
> 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ù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢(xún)效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類(lèi)型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專(zhuān)業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專(zhuān)業(yè)操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤(pán)手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶(hù)體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷(xiāo)案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷(xiāo)成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類(lèi)分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類(lèi)分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10