《R語言數(shù)據(jù)分析與挖掘》課件第2章-第5章_第1頁
《R語言數(shù)據(jù)分析與挖掘》課件第2章-第5章_第2頁
《R語言數(shù)據(jù)分析與挖掘》課件第2章-第5章_第3頁
《R語言數(shù)據(jù)分析與挖掘》課件第2章-第5章_第4頁
《R語言數(shù)據(jù)分析與挖掘》課件第2章-第5章_第5頁
已閱讀5頁,還剩84頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

回歸分析簡單線性回歸

簡單線性回歸>eruption.lm<-lm(eruptions~waiting,data=faithful)>coeffs<-coefficients(eruption.lm)>coeffs#一元線性回歸的參數(shù):截距、斜率(Intercept)waiting-1.874015990.07562795>plot(eruptions~waiting,faithful,#繪圖變量 col="blue",#繪圖參數(shù) main="老忠實線性回歸結果",#標題 xlab="等待時間",#x軸標簽 ylab="持續(xù)噴發(fā)時間") #y軸標簽>fit<-lm(eruptions~waiting,data=faithful)>abline(fit,col="red")#畫出回歸模型lm參數(shù):因變量eruptions,自變量waiting,數(shù)據(jù)集faithful。使用coefficients()來顯示所得到的回歸方程中的系數(shù)。簡單線性回歸>waiting<-80#等待時間>duration<-coeffs[1]+coeffs[2]*waiting>duration(Intercept)4.1762>newdata<-data.frame(waiting=c(80,50))#封裝參數(shù)>predict(eruption.lm,newdata) 124.1762201.907381使用模型進行預測。簡單線性回歸

簡單線性回歸

簡單線性回歸

簡單線性回歸qq圖可用于直觀驗證一組數(shù)據(jù)是否來自于某個給定的分布,或者驗證兩組數(shù)據(jù)是否來自同一分布。根據(jù)所討論的分布計算出每個數(shù)據(jù)點的理論預期值,如果數(shù)據(jù)確實遵循假定的分布,那么在qq圖上的點將大致散落在一條直線上。正態(tài)概率圖就是一種把數(shù)據(jù)集與正態(tài)分布進行比較的圖形化工具。例如,可以比較線性回歸模型的標準化殘差來檢驗殘差是否真正地符合正態(tài)分布規(guī)律。>qqnorm(eruption.stdres,ylab="標準化殘差",xlab="正態(tài)得分",main="老忠實噴發(fā)持續(xù)時間")>qqline(eruption.stdres)

多元線性回歸

指標名說明crim按鎮(zhèn)分布的人均犯罪率zn居住區(qū)域地塊超過25,000平方英尺的比例indus每個鎮(zhèn)中非零售商業(yè)用地的比例chas與查爾斯河有關的啞數(shù)據(jù)(1表示河流范圍,0為其他)nox一氧化氮濃度(partsper10million)rm每戶平均房間數(shù)age1940年前修建的戶主居住的單位數(shù)dis到5個波士頓就業(yè)中心的加權距離rad到達放射狀高速公路方便程度的指數(shù)tax每萬美元的全額房產稅率ptratio每個鎮(zhèn)的小學生師比

b1000(B-0.63)^2其中B是每個鎮(zhèn)的黑人比例lstat低收入人口比例medv一千美元為單位的戶主居住房屋的價格中位值多元線性回歸把medv當作因變量,而把其余的指標作為自變量,可以建立起一個多元線性回歸模型如下:使用lm()函數(shù)計算得出模型并保存在變量Boston.lm中>Boston.lm<-lm(medv~.,data=BostonHousing)多元線性回歸的判定系數(shù)>summary(Boston.lm)$r.squared[1]0.7406427

多元線性回歸

邏輯回歸

邏輯回歸封裝測試數(shù)據(jù)到數(shù)據(jù)框newdata:>newdata<-data.frame(hp=120,wt=2.8)調用函數(shù)predict()來執(zhí)行對廣義線性模型am.glm和newdata等參數(shù)的預測。在選擇預測類型時,則需要設置選項type="response"以得到預測概率>

predict(am.glm,

newdata,

type="response")

1

0.64181為了評價邏輯回歸的分類效果,可以在mtcars數(shù)據(jù)集上生成混淆矩陣predict<-predict(am.glm,type='response')>table(predict>0.5,mtcars$am)

01FALSE181TRUE112邏輯回歸用戶也可以選擇數(shù)據(jù)集中的一部分用于模型的選擇,而把剩余的數(shù)據(jù)作為測試對象,檢查邏輯回歸模型的推廣能力。例如,選擇mtcars的前22條數(shù)據(jù)作為訓練使用,而用后10條數(shù)據(jù)來測試。>train<-mtcars[1:22,]>test<-mtcars[23:32,]>am.glm<-glm(formula=am~hp+wt,data=train,family=binomial(link='logit'), control=list(maxit=100))>predict<-predict(am.glm,data.frame(test),type='response')>table(predict>0.5,test$am)

01FALSE33TRUE04THANKS聚類分析8.1特征空間與距離“方以類聚,物以群分”。機器學習與基于規(guī)則的推理不同,是一個以數(shù)據(jù)為基礎的歸納學習模式和規(guī)律的過程。分類和聚類是兩種典型的機器學習應用。在分類時,已知類別的個數(shù),每一個類別分配了一個唯一的標簽,分類就是根據(jù)帶標簽的樣本學習得到一個分類器,再對一個不帶標簽的測試對象按照應屬類別為它加上標簽的過程。與分類不同,聚類的樣本數(shù)據(jù)不帶有標簽,根據(jù)樣本之間的相似程度來將樣本分為幾個類別(或者叫簇),并且期望在每個類別的內部,樣本之間的相似程度盡可能大,而不同在類別之間,樣本的相似程度盡可能小。樣本可以表示成樣本空間中的點,二距離代表了點之間的(不)相似程度。聚類與分類距離的含義:鳶尾花數(shù)據(jù)集>

data(iris)>

str(iris)'data.frame':

150

obs.

of

5

variables:

$

Sepal.Length:

num

5.1

4.9

4.7

4.6

5

5.4

4.6

5

4.4

4.9

...

$

Sepal.Width

:

num

3.5

3

3.2

3.1

3.6

3.9

3.4

3.4

2.9

3.1

...

$

Petal.Length:

num

1.4

1.4

1.3

1.5

1.4

1.7

1.4

1.5

1.4

1.5

...

$

Petal.Width

:

num

0.2

0.2

0.2

0.2

0.2

0.4

0.3

0.2

0.2

0.1

...

$

Species

:

Factor

w/

3

levels

"setosa","versicolor",..:

1

1

1

1

1

1

1

1

1

1

...R內置iris數(shù)據(jù)集共150個樣本,特征向量為x=(花萼長度,花萼寬度,花瓣長度,花瓣寬度)。類別標簽為花的品種,分別是setosa、versicolor和virginica三種。ggplot畫圖>

library

(ggplot2)

#加載包含ggplot

()的包>

ggplot

(data

=

iris)

+

geom_point(aes(x

=

Petal.Length,

y

=

Petal.Width,

color

=

Species

,

shape

=

Species

),

position

=

"jitter")150個樣本中,每個類別各有50個樣本,用不同的顏色表示。可以看出,不同類別的樣本距離較遠,同一類別的樣本彼此接近。選擇合適的特征與距離度量>

ggplot

(data

=

iris

)

+

geom_point

(aes(x

=

Sepal.Length,

y

=

Sepal.Width,color

=

Species

,

shape

=

Species

),

position

=

"jitter")再以花萼的長度(Sepal.Length)和寬度(Sepal.Width)為特征來繪制散點圖。在setosa與另外兩個品種之間依然存在有明顯的分界,versicolor與virginica之間不僅沒有明顯的分界線,而且混雜在一起難以區(qū)別。樣本之間的距離距離的定義要滿足下列三個條件:非負、對稱和三角不等式。閔可夫斯基距離:假設n維實特征空間中樣本,距離當p=1時,稱為曼哈頓距離。當p=2時,稱為歐幾里得距離。R語言提供了函數(shù)dist()

計算數(shù)據(jù)集中樣本點與點的距離。歸一化處理>

x

<-

iris[,

-5]

#只使用數(shù)值屬性>

x

<-

scale(x)

#標準化>

dist.iris

<-

dist

(x,

method

=

"euclidean")

#計算距離矩陣>

dmat

<-

as.matrix

(dist.iris)

#調整為矩陣格式>

round

(dmat[1:5,1:5],

2)

#保留兩位小數(shù)

1

2

3

4

51

0.00

1.17

0.84

1.10

0.26有時不同維度上的特征具有不同的量綱,即使量綱相同,取值范圍也可能由很大的差異。歸一化處理:把取值變?yōu)?到1之間的數(shù)值。樣本集合之間的距離樣本子集之間的距離存在不同的類別之間的距離定義方法。注意:對于類別之間距離的不同定義,會產生不同的聚類效果。下面列出了幾種最常見的類之間距離定義。

單聯(lián)動:一個類中的所有樣本點與另一個類中的所有樣本點的距離的最小值。

全聯(lián)動:一個類中的所有樣本點與另一個類中的所有樣本點的距離的最大值。

平均聯(lián)動:一個類中的所有樣本點與另一個類中的所有樣本點的距離的平均值。

質心法:一個類中的質心到另一個類的質心的距離。

Ward法:兩個類之間的離差平方和。knn分類距離表示了數(shù)據(jù)樣本在特征空間的接近程度,相似的樣本具有相同的類別。可以根據(jù)距離度量來尋找在空間中與未知樣本最為接近的帶有類別標簽的樣本,用它們給新數(shù)據(jù)分類。

在R語言的class包中提供了knn()函數(shù),用已知數(shù)據(jù)中的k個近鄰對測試數(shù)據(jù)分類,給沒有標記類別的數(shù)據(jù)加上類別標簽。函數(shù)knn()的調用形式如下:knn

(train,

test,

cl,

k

=

1,

l

=

0,

prob

=

FALSE,

use.all

=

TRUE)參

數(shù)說

明train訓練集案例的矩陣或數(shù)據(jù)框test測試集案例的矩陣或數(shù)據(jù)框cl訓練集實際分類的因子型數(shù)據(jù)k考慮的近鄰數(shù)量l確定的決策所需的最少得票prob如果設為TRUE,則會把贏得類別時得到的投票比例返回給屬性probuse.all控制如何處理平局(多個近鄰距離相等)的方法。如果設為TRUE,則考慮所有距離等于第k大的近鄰,否則只隨機選擇一個距離第k大的近鄰以只考慮k個近鄰knn舉例:鳶尾花library

(class) #用50%樣本組成訓練集train

<-

rbind

(iris3[1:25,,1],

iris3[1:25,,2],

iris3[1:25,,3])test

<-

rbind

(iris3[26:50,,1],

iris3[26:50,,2],

iris3[26:50,,3])cl

<-

factor

(c

(rep("setosa",25),

rep("versicolor",25),

rep("virginica",25))) #cl用作分類標簽#對測試集調用knn()函數(shù)iris.knn

<-

knn

(train,

test,

cl,

k

=

3,

prob=TRUE)把鳶尾花數(shù)據(jù)集一分為二,一半用于訓練,一半用于測試。選擇參數(shù)k=3,調用knn()?;煜仃?gt;

target

<-

factor

(c

(rep("setosa",25),

rep("versicolor",25),rep("virginica",25)))

#目標分類標簽>

#預測分類結果與目標類別比較:行為預測值,列為實際值,對角線上的是分類正確的結果>

table

(iris.knn,

target)

#混淆矩陣

targetiris.knn

setosa

versicolor

virginica

setosa

25

0

0

versicolor

0

23

3

virginica

0

2

22對角線上的元素代表了分類正確的結果。行中除了對角線元素之外如果還有非0值,表示了誤報。列中除了對角線元素之外如果還有非0值,表示了漏報??梢杂没煜仃噥碓u價分類器的性能。8.2聚類算法人工神經網絡一般都使用有監(jiān)督的學習。在神經網絡中,通過學習來調整每個神經元節(jié)點對輸入信號與偏移量加權時使用的權值。類似于其他有監(jiān)督學習的方法,訓練神經網絡的目標就是通過參數(shù)的選擇使模型成為一個可以正確地把輸入數(shù)據(jù)轉化為預期輸出結果的映射??梢詰枚鄬痈兄髂P?,應用神經網絡解決非線性回歸與分類等有監(jiān)督學習中的問題kmeans聚類k均值算法包括下列具體步驟:在樣本數(shù)據(jù)集中任選k個樣本點作為初始的簇心;掃描每個樣本點,求該樣本點到各個簇心之間的距離,選擇其中最短距離的簇心,并將樣本點歸為該簇心表示的類。別對每個類中的所有樣本點求均值,作為新的簇心。重復步驟(2)和(3),直到達到最大迭代次數(shù),或者更新后的簇心與原來的簇心幾乎吻合(形成不動點)。kmeans()函數(shù)的主要參數(shù)參

數(shù)說

明x數(shù)據(jù)的數(shù)值矩陣,或者能被轉化成矩陣的對象(例如,數(shù)值向量或只包含數(shù)值列的數(shù)據(jù)框)centers目標的簇的數(shù)量k,或是一組各不相同的初始簇心。如果是k,會隨機選擇幾組x中的行作為初始簇心iter.max算法指定的最大迭代次數(shù)nstart當centers是一個數(shù)字時,表示需要選擇多少組隨機簇心kmeans對象kmeans()函數(shù)通過迭代將數(shù)據(jù)點劃分為k簇,使得每一個點到所屬的簇心的距離之和最小。結果就是k個簇心都等于該簇中所有點的均值。函數(shù)調用的形式如下:kmeans(x,centers,iter.max=10,nstart=1)kmeans

()函數(shù)返回“kmeans”類中的一個對象,對象屬性可以直接訪問。參數(shù)說明cluster整數(shù)向量取值從1~k,表明每一點被劃分到哪一個簇centers簇心矩陣totss距離的總平方和withinss對應每一個簇的簇內距離平方和向量

size每一個簇包含的點的個數(shù)iter迭代次數(shù)

kmeans()函數(shù)返回值舉例:鳶尾花聚類>

x

<-

iris[,-5]

#用四種幾何尺寸作為特征向量>

y

<-

iris$Species

#類別為Species屬性>

kc

<-

kmeans

(x,3)

#使用特征向量聚成三類>

table

(y,kc$cluster)

#列出混淆矩陣y

1

2

3

setosa

0

50

0

versicolor

48

0

2

virginica

14

0

36>

kc$centers

#查看簇心

>

kc$size

#查看各簇的大小[1]

62

50

38

Sepal.Length

Sepal.Width

Petal.Length

Petal.Width1

5.901613

2.748387

4.393548

1.4338712

5.006000

3.428000

1.462000

0.2460003

6.850000

3.073684

5.742105

2.071053層次聚類層次結構普遍存在于自然界和人們的社會生活中,例如動物的分類方法、文件的樹狀結構。層次聚類是一種自底向上的逐步聚類方法。在k均值聚類中,用戶必須預先知道要把樣本聚成多少個簇。有些時候,用戶難以準確地預判到底存在多少類。層次聚類采用自底向上的方式構建了一個聚類層次結構,而無需提前指定聚類的個數(shù)。層次聚類的步驟層次聚類算法的具體步驟如下:假設樣本總數(shù)為N,在初始時,所有樣本點都自成一類,一共有N類;選擇距離最小的兩個類合并,于是減少一類,剩下N

1類;重復步驟2,直到所有數(shù)據(jù)點都屬于同一類。R語言通過函數(shù)hclust()實現(xiàn)層次聚類。hclust()需要將數(shù)據(jù)用距離矩陣表示出來,所以還需用到dist()函數(shù)。在默認情況下,類之間使用全聯(lián)動方法度量距離。層次聚類舉例clusters<-hclust(dist(iris[,3:4]))plot(clusters)以iris為例。選擇對versicolor和virginica區(qū)分度更高的Petal.Length和Petal.Width兩種花瓣屬性來計算距離。確定分類數(shù)量>

clusterCut

<-

cutree(clusters,

3)>

table(clusterCut,

iris$Species)

clusterCut

setosa

versicolor

virginica

1

50

0

0

2

0

21

50

3

0

29

0從圖中得出結論,最好把數(shù)據(jù)劃分成三類或四類。可以使用函數(shù)cutree()把系統(tǒng)樹劃分成理想數(shù)量的類。不妨選擇分成三類,用混淆矩陣對聚類結果與真實的品種進行比較。改進分類結果>clusters<-hclust(dist(iris[,3:4]),method='average’)>plot(clusters)>

clusterCut

<-

cutree(clusters,

3)>

table(clusterCut,

iris$Species)

clusterCut

setosa

versicolor

virginica

1

50

0

0

2

0

45

1

3

0

5

49用平均聯(lián)動替代全聯(lián)動計算距離。分類效果明顯改善。查看錯分樣本調用ggplot

()按照品種和分類結果標色。可以看出錯分的樣本點都位于邊界。ggplot(data

=

iris,

aes(x

=

Petal.Length,

y

=

Petal.Width,color

=

Species),

position

=

"jitter")

+

geom_point(alpha

=

0.4,

size

=

3.5)

+

geom_point(col

=

clusterCut)

+

scale_color_manual(values

=

c('black',

'red',

'green'))密度聚類基于密度的聚類(DBSCAN)是一種對數(shù)據(jù)點集進行劃分的聚類方式,可以從帶噪聲和離群點的數(shù)據(jù)中找到不同形狀和大小的簇。DBSCAN的基本思想非常直觀:給定位于同一空間的一組數(shù)據(jù)點,如果一些分布稠密的點緊密地依靠在一起,則應被歸為一類,而處在低密度區(qū)域的點就應該被看作離群點。也就是說,在點集的不同子集中計算出的密度是決定聚類的依據(jù),因此,近鄰多的點與距離其他鄰居遠的點顯然要分別對待。密度聚類中的概念核心點:如果一點被稱為核心點,則至少在其給定半徑的鄰域中包含了指定數(shù)量的點。直達點:如果某一點是一個核心點,另一點在該點給定半徑的的鄰域中,則稱為該點的直達點??蛇_點:如果存在一條路徑從某一點連接到一個給定點,則稱該點維給定點的可達點;除該點外,路徑上的其他點均須為核心點。注意,可達關系并不一定對稱,無論距離遠近,沒有點可以從非核心點可達。不能從其他點可達的點都屬于離群點。密度連通性:如果兩個點均可從另一點可達,則稱這兩點密度連通。DBSCAN的步驟DBSCAN算法可以簡化成下列幾步:找到每一個點的鄰域,如果鄰域中有超過給定數(shù)量的點,該點即被識別為核心點。找到核心點的連通部分,而忽略掉非核心點;如果非核心點是附近一個簇的鄰居,將其分配給附近的簇,否則劃分為噪聲點。密度聚類舉例install.packages

("fpc")library

(fpc)library

(mlbench)pts

<-

mlbench::mlbench.cassini

(n

=

600,

relsize

=

c(3,2,1))plot

(pts)先用mlbench包來生成仿真數(shù)據(jù)。再用R語言里面的fpc包來實現(xiàn)密度聚類算法。應用:密度聚類mlbench.cassini()函數(shù)產生了三個類別的樣本點。其中兩個邊緣的類分布成香蕉形狀,中間一類分布為圓形。函數(shù)的第一個參數(shù)n表示總的樣本點數(shù),第二個參數(shù)為一個向量,反映各個類別樣本點的相對比例。dbscan函數(shù)>

cluster.density

<-

dbscan

(data

=

pts$x,

eps

=

0.2,

MinPts

=

5,

method

=

"hybrid")>

cluster.densitydbscanPts=600MinPts=5eps=0.2

0123border34174seed029618195total330019899>

plot.dbscan(cluster.density,pts$x)取鄰域半徑為0.2,最小樣本點MinPts為5,進行密度聚類.參數(shù)method="hybrid"表示提供的數(shù)據(jù)為原始數(shù)據(jù),并計算原始數(shù)據(jù)的部分距離矩陣。border表示非核心點,seed為核心點聚類效果聚類結果表明,總共被聚為四類對應圖中四種顏色的三角形。圖中圓圈表示非核心點,用三角形表示核心點。改變參數(shù)>

cluster.density

<-

dbscan(data

=

pts$x,

eps

=

0.22,

MinPts

=

5,

method

=

"hybrid")>

cluster.densitydbscanPts=600MinPts=5eps=0.22123border0102seed30019098total300200100

密度聚類中,鄰域半徑和最小樣本點數(shù)決定了最終的聚類效果。如果改變鄰域半徑,就能產生不同的聚類結果。略微擴大半徑,對比前面的結果,可以看到border點明顯減少。8.3分類算法分類和回歸同屬于有監(jiān)督的學習,因為對樣本而言,在學習的時候已經獲知它們對應的因變量。分類應用與回歸應用的區(qū)別在于,它們的因變量類型分別是類別的標簽和數(shù)值。很多分類模型同樣適用于回歸問題。分類算法-決策樹決策樹決策樹是一類有監(jiān)督的學習算法,可以視為同一組if/then規(guī)則的集合,但是從結構上看決策樹又是一種樹狀模型。如果針對的是分類問題,一棵決策樹中的每一片樹葉都代表一個類別的標簽,而每一個非樹葉節(jié)點則表示一個條件測試,每一個分支表明了條件測試執(zhí)行的結果。訓練好決策樹后,就可以用做分類預測:從樹根開始,根據(jù)數(shù)據(jù)樣本是否滿足當前條件,來選擇應該繼續(xù)訪問哪一個子節(jié)點,這樣就可以一步一步地到達樹葉,從而判斷樣本的類別。從樹根到樹葉的一條路徑就反映出對樣本分類的過程。與其他機器學習方法相比較,決策樹易于理解,也不需要對數(shù)據(jù)進行復雜的預處理,既不需要標準化,也無須特別關注NA數(shù)據(jù)。生成決策樹的步驟得到一棵全局最優(yōu)的決策樹是NP難的問題,現(xiàn)實中依賴各種貪婪算法求解決策樹的訓練問題。CART是分類與回歸樹的簡稱(ClassificationandRegressionTrees),該算法生成的決策樹既可用于分類,也可用于回歸。構建CART決策樹的基本步驟可以概括成以下幾點:對于給定的訓練數(shù)據(jù)子集,尋找預測標簽的最佳特征;劃分上述特征以獲得最好的分類結果,劃分出兩個新的數(shù)據(jù)子集;重復步驟1和2,直到滿足停止條件。rpart包rpart包實現(xiàn)了可用于分類或回歸的決策樹。rpart()函數(shù)的使用方法相對簡單,其調用形式為:rpart(formula,data,weights,subset,na.action=na.rpart,method,model=FALSE,x=FALSE,y=TRUE,parms,control,cost,...)參

數(shù)說

明formula表示因變量與自變量關系的響應公式,如y~x1+x2表示y依賴于x1和x2data可選項,用于解釋公式中的變量名,通常是包含formula中變量的數(shù)據(jù)框weights可選項,案例權重subset可選表達式,表示哪些數(shù)據(jù)行構成的子集可以用于擬合

na.action處理缺失項的方法,默認情況下刪去沒有因變量的樣本,但是保留缺少部分自變量的樣本method可選項包括“anova”“poisson”“class”或“exp”。如果未提供該參數(shù),程序會根據(jù)因變量的數(shù)據(jù)類型自行猜測。如果因變量是因子型,默認method="class";如果是數(shù)值型,假定method="anova";如果是生存對象,假定method="exp";如果包含兩列,假定method="poisson"。建議調用時明確指定所需方法決策樹聚類:鳶尾花分類install.packages

("rpart")

#安裝包library

(rpart)

#載入包#因變量為Species,公式中的.表示自變量為其余屬性,#method="class"表明是分類樹fit

<-

rpart

(Species

~

.,

method="class",

iris)選擇用與聚類時同樣的長寬尺寸特征來完成分類。很多深度學習包都會帶有支持GPU多線程運算的版本,需要更復雜的安裝過程。rpart()函數(shù)產生的分類樹十分簡單,只有兩個條件節(jié)點和三片樹葉。決策樹畫圖函數(shù)使用泛型函數(shù)plot()畫出來的決策樹過于簡單,而且非常不美觀。可以使用rpart.plot包中的rpart.plot()畫圖。安裝好rpart.plot包后,執(zhí)行下列語句:>

library

(rpart.plot)>

rpart.plot

(fit)貝葉斯定理對于兩個隨機事件,概率分別為P(A)和P(B)。條件概率分別是P(A|B)和P(B|A),聯(lián)合概率P(A,B)。

貝葉斯定理給出了下列關系:貝葉斯方法在分類應用中,通常給定了一個由若干假設組成的假設空間,如樣本的類別空間。分類問題就是需要在給定樣本屬性度量值的情況下來推知其類別,也就是求解

即最大的后驗概率。極大似然法的目標則是要決定哪一個假設能夠最合理地解釋樣本為什么會具有這些屬性,也就是求解貝葉斯方法的思想則是,P(假設|證據(jù))=P(假設)*P(證據(jù)|假設)/P(證據(jù)),需要在后驗概率和似然度之間考慮假設與證據(jù)的先驗概率的比值,因為先驗概率分布的變化可能會使得極大似然估計與實際情況存在很大的差異。樸素貝葉斯方法假設給定先驗概率信息和特征值

,應用貝葉斯方法還需要計算條件概率

。如果樣本的屬性是高維數(shù)據(jù),條件概率計算就非常復雜。在貝葉斯公式的基礎上增加一個新的假設條件,也就是名為“樸素”的獨立性假設:只要假定任意兩個特征彼此是條件獨立的(暫時不考慮它們實際上是否存在某種形式的條件依賴),這樣就可以在計算聯(lián)合概率時,只需把每一個單獨屬性的條件概率簡單相乘。獨立性假設的結果在數(shù)學上也許不盡嚴謹,但是在實用性上仍不失為聯(lián)合概率的一種近似解,并且有大量的實例表明這種做法對于分類來說已經足夠有效。獨立性可視化

pairs

(iris[1:4],

line.main=1.5,

main

=

"Iris數(shù)據(jù)集特征對比(紅:setosa

,綠:versicolor,藍:virginica)", pch

=

21,

bg

=

c("red",

"green3",

"blue") [unclass(iris$Species)])E1071包library(e1071)

#加載包e1071classifier

<-

naiveBayes(iris[,1:4],

iris[,5])

#創(chuàng)建分類器

table

(predict(classifier,

iris[,-5]),

iris[,5])

#生成混淆矩陣

#混淆矩陣的結果

setosa

versicolor

virginica

setosa

50

0

0

versicolor

0

47

3

virginica

0

3

47

在e1071包中包含了樸素貝葉斯模型用戶可以直接調用naiveBayes(),在參數(shù)中分別給出自變量和因變量。雖然一些特征和獨立性假設并不一致,但是還是可以取得非常好的分類效果。泛化性能set.seed

(2018)

#初始化隨機種子index

<-

sample

(x

=

2,

size

=

nrow

(iris),

replace

=

TRUE,

prob

=

c(0.8,0.2))

#按照80%與20%比例劃分iris.Training

<-

iris[index==1,

]

#訓練集iris.Test

<-

iris[index==2,

]

#測試集classifier

<-

naiveBayes(iris.Training[,1:4],

iris.Training

[,5])table

(predict(classifier,

iris.Test[,-5]),

iris.Test[,5])把數(shù)據(jù)集分成兩部分,分別用于訓練與測試。使用抽樣函數(shù)sample()來劃分數(shù)據(jù)集,按參數(shù)prob中給出的比例隨機從x中生成數(shù)量等于size的整數(shù)。設置replcae=TRUE,使用置換抽樣的方法。支持向量機線性可分:如果在特征空間中存在一個超平面能夠將特征空間中的實例分為兩類,使得超平面的任意一側的實例全部擁有同一種標簽。若找不到這樣的平面,則稱為線性不可分。在線性可分的情況下,在超平面兩側所有樣本點中,存在某點離該平面最近,則把這個最近的距離稱為間隔。支持向量機(SupportVectorMachine,SVM)是一種有監(jiān)督的學習方法,可以用于與分類和回歸相關的數(shù)據(jù)分析任務。給定一組訓練樣本,每一個樣本都帶有各自的類別標簽,支持向量機的訓練目標就是構建一個分類模型,將空間中的不同類別的點用盡可能寬的間隔分開。線性可分核函數(shù)支持向量機用到了線性可分的假設。對于線性不可分的情形,可以借助核函數(shù)把低維空間中的點映射到高維空間,期望在低維空間中線性不可分的點在高維空間變得線性可分。選擇核函數(shù)是為了可以完成樣本點從低維空間到高維空間的變換。但是,在獲得線性可分性能時,用戶也不希望因此引入過高的計算開銷。支持向量機中設計核函數(shù)時只要求它的內積形式可以用原空間中點的簡單函數(shù)來計算。因此,高維空間中的超平面可定義為與空間中某個向量的點積為常數(shù)的點的集合。e1071包中的svm()函數(shù)函數(shù)svm()返回的是一個SVM類中的對象,可以使用svm_model$labels查看。下面列出了對象中的部分屬性:

(1)SV:發(fā)現(xiàn)的支持向量矩陣;(2)labels:分類模式下對應的標簽;(3)index:輸入向量中的支持向量索引。svm()函數(shù)的主要核函數(shù)包括:支持向量機舉例library

("e1071")attach

(iris)x

<-

subset

(iris,

select=-Species)

y

<-

Speciessvm_model

<-

svm

(Species

~

.,

data=iris)

#品種是其他屬性的因變量subset()函數(shù)從iris中取出子集,第一個參數(shù)表示數(shù)據(jù)集,select是一個邏輯向量。svm_model默認調用的是最常用核函數(shù)之一的徑向核radial。分類效果>

pred

<-

predict

(svm_model,

x)

>

table

(pred,

y)

ypred

setosa

versicolor

virginica

setosa

50

0

0

versicolor

0

48

2

virginica

0

2

48

從分類效果可以看出,在versicolor和virginica中,各有兩個樣本被混淆。支持向量機取得的分類效果現(xiàn)在比決策樹更好。數(shù)據(jù)預處理plot

(svm_model,

iris,

Petal.Width

~

Petal.Length,

#因為iris數(shù)據(jù)包括四個屬性,在二維圖形中需要指定其余二維,才能顯示區(qū)域邊界

slice

=

list

(Sepal.Width

=

2,

Sepal.Length

=

4))從圖中可以觀察到支持向量(用×表示)的分布情況。因為把高維數(shù)據(jù)畫在了二維平面上,而且間隔的選取對其他兩個沒有顯示的維度的特定值設置的,所以圖中的支持向量并不一定落在邊界附近。參數(shù)優(yōu)化>

svm_model_after_tune

<-

svm

(Species

~

.,

data=iris,

kernel="radial",

cost=2,

gamma=0.8)>

summary

(svm_model_after_tune)>

pred

<-

predict

(svm_model_after_tune,x)

>

table

(pred,

y)

y

pred

setosa

versicolor

virginica

setosa

50

0

0

versicolor

0

49

0

virginica

0

1

50支持向量機對參數(shù)敏感。以radial核函數(shù)、損失系數(shù)2(表明了分類器對錯誤分類的容忍度。)以及核函數(shù)參數(shù)0.8訓練出一個新的分類器。從混淆矩陣可以看出結果的改善。內容導航CONTENTS聚類算法特征空間與距離分類算法8.18.28.38.4集成學習8.4集成學習集成學習是機器學習領域中一個發(fā)展迅速的分支。其一般模式是將多個弱學習器組合起來構造一個強學習器。舉例來說,我們可以把一個隨機森林、一個支持向量機和一個簡單的線性回歸模型組合起來,集成在一起構成一個性能更強大的最終預測模型。其中的關鍵點是借助單個預測模型的多元性來形成一個強大的組合。集成學習的基本方法在集成學習時,如果給定了一組基礎學習算法,針對一條數(shù)據(jù),每一個算法都可以做出自己的預測。在最終決策時,要通盤考慮所有的預測,即使得到的結論可能會和某一個算法的結果相反?;镜臎Q策方法包括如下幾種。(1)均值法:在回歸時,對所有單一算法的預測值取均值;如果是分類問題,則對所有類別出現(xiàn)的概率求均值。(2)投票法:處理分類問題時,在眾多算法對結果的投票中選取得票最多的作為預測值。(3)加權平均法:給不同的算法賦以不等的權值,對它們的預測結果做加權平均,把加權平均值作為輸出。

學習的組合策略幾種廣泛運用的學習模型組合策略在R語言中也獲得了相應的支持。(1)Bagging(也叫Bootstrap):是一種抽樣方法,在包含n條記錄的原始數(shù)據(jù)集中隨機選擇n個觀察樣本。采用的是有放回的隨機抽樣:每一次樣本選擇時,原始數(shù)據(jù)集中的每一條記錄都具有相同的幾率被選中。因此,在n個樣本中,可能會存在很多條重復記錄。(2)Boosting:使用多個模型組成鏈式結構,每一個模型學習改正前一個模型的錯誤。(3)Stacking:構建多個(一般類型不同的)模型和一個超級模型,后者用于學習利用前者的輸出得到總體預測值的最佳組合方式。選擇模型的基本原則:(1)單個模型需要滿足特定的準確率條件。(2)不同模型的預測之間盡可能不要高度相關。隨機森林隨機森林是一種基于Bagging技術的集成學習方法。首先建立起一座由很多棵決策樹組成的森林,為了降低這些樹之間決策的相關性,使用Bootstrap采樣方法來獲得隨機樣本去訓練不同的樹;然后,在構建一棵決策樹的時候也不會用到數(shù)據(jù)的全部特征,而只是分別使用它們的一些子集;最后,森林做出總體的預測時,根據(jù)每一棵個體決策樹獨立的預測結果(如用投票法則決出多數(shù)票,或用均值法則計算均值等)生成最終預測。隨機森林雖然集成的是類型相同的決策樹,但借助隨機性減少了決策樹之間的相關性,在最終的集體決策時可以克服單一決策樹的不足,因此,可以明顯地改進模型的總體性能。和決策樹一樣,隨機森林既可以用于數(shù)值型因變量,也可以用于分類型的因變量,對不同數(shù)據(jù)變量分別建立起回歸模型和分類模型。隨機森林構建隨機森林決策樹的方法隨機森林中的每一棵樹都按照以下步驟構建:

(1)隨機選擇樣本:比如,選取全部數(shù)據(jù)的大約2/3用于訓練,樣本采用有放回的隨機抽樣方式從原始數(shù)據(jù)中抽??;(2)隨機選擇變量:在用于預測的全部特征變量中隨機選取若干個,將其中劃分效果最好的特征變量用于樹的節(jié)點劃分。隨機森林的隨機性綜合體現(xiàn)在兩個方面:首先,在建立每一棵樹時采用隨機觀察的方式得到樣本;其次,在樹的節(jié)點劃分時隨機選擇變量。隨機森林的局限性:隨機森林對于全新的數(shù)據(jù)泛化效果一般。隨機森林舉例>

install.packages("randomForest")>

library(randomForest)>

set.seed

(2018)

#生成隨機種子>

index

<-

sample

(2,

nrow(iris),

replace=TRUE,

prob=c(0.8,0.2))>

trainData

<-

iris[index==1,]

#把數(shù)據(jù)集劃分成訓練集與測試集>

testData

<-

iris[index==2,]>

#調用randomForst建模,由100棵樹組成>

iris_rf

<-randomForest

(Species~.,

data=trainData,

ntree=100,

proximity=TRUE)安裝并載入randomForest包。在隨機森林算法中需要考慮兩個重要參數(shù):森林中樹的數(shù)量ntree,以及每一棵樹中用到的隨機變量的個數(shù)mtry。查看隨機森林對象Call:randomForest(formula=Species~.,data=trainData,ntree=100,proximity=TRUE)Typeofrandomforest:classificationNumberoftrees:100No.ofvariablestriedateachsplit:2OOBestimateoferrorrate:5.47%Confusionmatrix:setosaversicolorvirginicaclass.errorsetosa42000.00000000versicolor03830.07317073virginica04410.08888889

檢查對象iris_rf的內容。默認值mtry=2?;煜仃嚱o出了分類效果。泛型函數(shù)plotplot(iris_rf)函數(shù)的執(zhí)行結果如圖所示??梢钥闯鲥e誤率隨著森林中決策樹的數(shù)量的增加而趨于穩(wěn)定。使用隨機森林預測>

irisPred<-predict(iris_rf,newdata=testData)>table(irisPred,testData$Species)

irisPredsetosaversicolorvirginicasetosa800versicolor090virginica005

使用predict函數(shù)對測試集進行預測。預測結果顯示出隨機森林的良好性能。一般的堆疊式集成學習在集成學習中,還可以使用不同類型的模型來改善學習的效果。例如,在使用的底層模型中,分別選擇了決策樹、KNN和支持向量機作為基礎學習算法。再次使用決策樹作為上層的模型。在R語言中,有很多支持集成學習的包,在示例中使用的是比較簡單的caret包。示例>

library

(mlbench)>

data

(Ionosphere)>

str

(Ionosphere)'data.frame':

351

obs.

of

35

variables:

$

V1

:

Factor

w/

2

levels

"0","1":

2

2

2

2

2

2

2

1

2

2

...

$

V2

:

Factor

w/

1

level

"0":

1

1

1

1

1

1

1

1

1

1

...

$

V3

:

num

0.995

1

1

1

1

......$

V34

:

num

-0.453

-0.0245

-0.3824

1

-0.657

...

$

Class:

Factor

w/

2

levels

"bad","good":

2

1

2

1

2

1

2

1

2

1

...

下載并安裝好caret包。使用機器學習標準數(shù)據(jù)集之一的Ionoshpere(包含在mlbench包中)。Ionosphere是一個關于電離層的數(shù)據(jù)集,包含了34個自變量(V1~V34)和1個二值分類因變量(Class)。劃分數(shù)據(jù)集>

#加載caret包>

library('caret')>

#選擇隨機種子>

set.seed(1)>

#隨機生成索引向量>

index

<-

createDataPartition(Ionosphere$Class,

p=0.75,

list=FALSE)>

#劃分訓練集和測試集>

trainSet

<-

Ionosphere[

index,]>

testSet

<-

Ionosphere[-index,]按照75%和25%的比例把兩個Class分別分配給兩個子集。定義變量#分別定義模型中的自變量和因變量

predictors<-c("V1",

"V2",

"V3",

"V4",

"V5","V6",

"V7",

"V8",

"V9",

"V10",

"V11",

"V12",

"V13",

"V14",

"V15","V16",

"V17",

"V18",

"V19",

"V20","V21",

"V22",

"V23",

"V24",

"V25","V26",

"V27",

"V28",

"V29",

"V30","V31",

"V32",

"V33",

"V34")

outcomeName

<-

'Class'n

<-

names

(trainSet)predictors

<-

c

(n[!n

%in%

"Class"])按名稱逐一定義因變量(outcomeName)與自變量(predictors)相當繁瑣。除Class之外所有的變量名都是自變量。因此,可以利用了變量名函數(shù)names()來簡化操作。底層模型:KNNmodel_knn

<-

train

(trainSet[,predictors],trainSet[,outcomeName],

method='knn',

trControl=fitControl,

tuneLength=3)

#使用KNN模型預測測試集

testSet$pred_knn

<-

predict

(object

=

model_knn,testSet[,predictors])使用class包中的KNN模型。用混淆絕陣檢驗效果。精度

:

0.8391。

ReferencePrediction

bad

good

bad

18

1

good

13

55底層模型2:決策樹library(rpart)model_dt

<-

train

(trainSet[,predictors],trainSet[,outcomeName],

method='rpart',

trControl=fitControl,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論