【機(jī)器學(xué)習(xí)與R語(yǔ)言】11- Kmeans聚類(lèi)

1.理解Kmeans聚類(lèi)

1)基本概念

  • 聚類(lèi):無(wú)監(jiān)督分類(lèi)吱抚,對(duì)無(wú)標(biāo)簽案例進(jìn)行分類(lèi)。
  • 半監(jiān)督學(xué)習(xí):從無(wú)標(biāo)簽的數(shù)據(jù)入手骄噪,是哦那個(gè)聚類(lèi)來(lái)創(chuàng)建分類(lèi)標(biāo)簽诸尽,然后用一個(gè)有監(jiān)督的學(xué)習(xí)算法(如決策樹(shù))來(lái)尋找這些類(lèi)中最重要的預(yù)測(cè)指標(biāo)。
  • kmeans聚類(lèi)算法特點(diǎn):
image.png
  • kmeans算法涉及將n個(gè)案例中的每一個(gè)案例分配到指定k個(gè)類(lèi)中的一個(gè)(指定k是為了最小化每個(gè)類(lèi)內(nèi)部差異挨决,最大化類(lèi)之間的差異)请祖。
  • 為避免遍歷案例所有可能的組合來(lái)計(jì)算最優(yōu)聚類(lèi),kemans使用了局部最優(yōu)解的啟發(fā)式過(guò)程脖祈,即對(duì)初始的類(lèi)分配進(jìn)行修正來(lái)判斷是否提升了類(lèi)內(nèi)部的同質(zhì)性肆捕。
  • kmeans聚類(lèi)的兩個(gè)階段:一是將案例分配到初始的k個(gè)類(lèi)中;二是根據(jù)落入當(dāng)前類(lèi)的案例調(diào)整類(lèi)的邊界來(lái)更新分配盖高。重復(fù)更新和分配多次慎陵,直到改變不會(huì)提升類(lèi)的優(yōu)度為止。
  • 可通過(guò)嘗試多次不同k的聚類(lèi)分析來(lái)測(cè)試研究結(jié)果的穩(wěn)健性喻奥。

2)kmeans運(yùn)作的基本原理

①使用距離來(lái)分配和更新類(lèi)

  • 初始類(lèi)中心的選擇:從訓(xùn)練集中選擇的k個(gè)隨機(jī)案例來(lái)確定席纽;或者選擇發(fā)生再特征空間任意地方的隨機(jī)值(而不是只在數(shù)據(jù)的觀測(cè)值之間進(jìn)行選擇);或者完全跳過(guò)這一步撞蚕,通過(guò)將每個(gè)案例隨機(jī)分配到一個(gè)類(lèi)中润梯,直接進(jìn)入更新階段。
  • 選擇初始類(lèi)中心之后诈豌,其他的案例將分配到與其最相似仆救,或者根據(jù)距離函數(shù)最相近的類(lèi)中心抒和。距離函數(shù)如歐氏距離矫渔、曼哈頓距離、閔可夫斯基距離等庙洼。
  • 距離計(jì)算的數(shù)據(jù)必須是數(shù)值型,且需要標(biāo)準(zhǔn)化,計(jì)算的是每一個(gè)案例與每一個(gè)類(lèi)中心之間的距離油够。
  • 更新類(lèi):將初始的類(lèi)中心轉(zhuǎn)移到一個(gè)新的位置(“質(zhì)心”蚁袭,通過(guò)計(jì)算分配到當(dāng)前類(lèi)的各點(diǎn)的均值來(lái)獲得)。類(lèi)中心改變之后石咬,類(lèi)的邊界發(fā)生變化揩悄,案例重新分配,如此反復(fù)更新鬼悠,直到?jīng)]有額外的案例被重新分配為止删性,聚類(lèi)最終完成。
  • 聚類(lèi)結(jié)果的表達(dá):一是可以報(bào)告每個(gè)案例的分配情況焕窝;二是可以報(bào)告最后一次更新之后的質(zhì)心的坐標(biāo)蹬挺。
使用kmeans算法來(lái)分類(lèi)?

運(yùn)算過(guò)程如下:


指定k=3它掂,選擇初始類(lèi)中心

計(jì)算距離巴帮,歸類(lèi)

更新類(lèi)中心,重新分配

第二輪更新階段虐秋,重新分配

最終聚類(lèi)結(jié)果

②選擇適當(dāng)?shù)木垲?lèi)數(shù)

  • kmeans算法對(duì)于隨機(jī)選擇的聚類(lèi)中心很敏感榕茧。選擇類(lèi)的數(shù)目需要一種微妙的平衡:大k會(huì)提升類(lèi)的同質(zhì)性,但有過(guò)擬合的風(fēng)險(xiǎn)客给。
  • 理想情況下雪猪,最好有一些關(guān)于真實(shí)分組的先驗(yàn)知識(shí)。有時(shí)k也由業(yè)務(wù)需求或分析動(dòng)機(jī)所決定起愈。
  • 若沒(méi)有任何先驗(yàn)知識(shí)只恨,經(jīng)驗(yàn)規(guī)則就是k設(shè)為n/2的平方根(n是全部案例總數(shù)),對(duì)于大的數(shù)據(jù)集一般偏大抬虽。
  • “肘部法”度量不同k值:找到一個(gè)k(肘部點(diǎn))官觅,使得高于該值之后的收益會(huì)發(fā)生遞減。
image.png
  • 但在實(shí)際中阐污,反復(fù)測(cè)試大量的k值是不可行的休涤。不要要求最嚴(yán)格的性能,獲得類(lèi)最優(yōu)解集笛辟。大部分應(yīng)用中功氨,選擇一個(gè)k就夠了。

2.Kmeans聚類(lèi)應(yīng)用示例

探尋青少年市場(chǎng)細(xì)分

1)收集數(shù)據(jù)

30000名美國(guó)高中生的隨機(jī)案例數(shù)據(jù)集手幢,在知名社交網(wǎng)絡(luò)服務(wù)中保存了他們的個(gè)人資料捷凄。將網(wǎng)站頁(yè)面內(nèi)容劃分單詞,36個(gè)單詞被選來(lái)代表5大興趣類(lèi)围来。每個(gè)案例包括4個(gè)個(gè)人特征(畢業(yè)年份跺涤,性別匈睁,年齡,交友數(shù))和36種興趣桶错。

數(shù)據(jù)下載:

鏈接: https://pan.baidu.com/s/1CGkaRPc3glCjI-hWWg1Kug 提取碼: 74bm

2)探索和準(zhǔn)備數(shù)據(jù)

包括缺失值的查看航唆,缺失值的虛擬編碼和缺失值插補(bǔ)等。

## Step 2: Exploring and preparing the data ----
teens <- read.csv("snsdata.csv")
str(teens)

# look at missing data for female variable
table(teens$gender)
table(teens$gender, useNA = "ifany") #計(jì)數(shù)缺失值

# look at missing data for age variable
summary(teens$age) #包含缺失值統(tǒng)計(jì)

# eliminate age outliers
teens$age <- ifelse(teens$age >= 13 & teens$age < 20,
                     teens$age, NA)

summary(teens$age)

# reassign missing gender values to "unknown"
teens$female <- ifelse(teens$gender == "F" &
                         !is.na(teens$gender), 1, 0)
teens$no_gender <- ifelse(is.na(teens$gender), 1, 0)

# check our recoding work
table(teens$gender, useNA = "ifany")
table(teens$female, useNA = "ifany")
table(teens$no_gender, useNA = "ifany")

# finding the mean age by cohort
mean(teens$age) # doesn't work
mean(teens$age, na.rm = TRUE) # works

# age by cohort
aggregate(data = teens, age ~ gradyear, mean, na.rm = TRUE)

# create a vector with the average age for each gradyear, repeated by person
# ave函數(shù)返回一個(gè)具有重復(fù)的組均值的向量院刁,使得結(jié)果在長(zhǎng)度上等于原始向量的長(zhǎng)度
ave_age <- ave(teens$age, teens$gradyear,
                 FUN = function(x) mean(x, na.rm = TRUE))


teens$age <- ifelse(is.na(teens$age), ave_age, teens$age)

# check the summary results to ensure missing values are eliminated
summary(teens$age)

3)訓(xùn)練模型

使用基礎(chǔ)包的kmeans函數(shù)糯钙。注意將特征標(biāo)準(zhǔn)化,這里用z-score標(biāo)準(zhǔn)化退腥。
另一個(gè)就是k值的指定超营,比如對(duì)人口分析很熟悉,或者對(duì)關(guān)于自然分組的真是數(shù)量有一些預(yù)感阅虫,也可參考一些資料等演闭,我們將符合年齡的高中生特征確定為5個(gè)典型類(lèi)型(聰明人,運(yùn)動(dòng)員颓帝,公主米碰,罪犯,無(wú)特征)购城。

## Step 3: Training a model on the data ----
interests <- teens[5:40]
interests_z <- as.data.frame(lapply(interests, scale))

set.seed(2345)
teen_clusters <- kmeans(interests_z, 5)

4)評(píng)估性能

模型的成功與否在于類(lèi)對(duì)于預(yù)期目的是否有用吕座。評(píng)估一個(gè)類(lèi)是否有用的最基本方法之一就是檢查落在每一組中的案例數(shù),數(shù)目過(guò)多或過(guò)少(如1個(gè)或幾個(gè))瘪板,則這些類(lèi)不太有用吴趴。
為深入了解類(lèi),可查看聚類(lèi)質(zhì)心的坐標(biāo)侮攀。因?yàn)橐呀?jīng)做了z-score標(biāo)準(zhǔn)化锣枝,所以負(fù)值表示低于總體均值,正值表示高于總體均值兰英。

## Step 4: Evaluating model performance ----
# look at the size of the clusters
teen_clusters$size

# look at the cluster centers
teen_clusters$centers
特征的質(zhì)心坐標(biāo)

通過(guò)研究類(lèi)在特征(興趣)中的表現(xiàn)撇叁,可以構(gòu)建有一個(gè)表來(lái)列出每組中的主要興趣項(xiàng):

列出每類(lèi)的主要特征

5)提高模型性能

根據(jù)聚類(lèi)結(jié)果,可以確定每個(gè)案例被分配到了哪一類(lèi)中畦贸,再探究不同的類(lèi)在原始數(shù)據(jù)中各特征的差異陨闹。

## Step 5: Improving model performance ----
# apply the cluster IDs to the original data frame
teens$cluster <- teen_clusters$cluster

# look at the first five records
teens[1:5, c("cluster", "gender", "age", "friends")]

# mean age by cluster
aggregate(data = teens, age ~ cluster, mean)

# proportion of females by cluster
aggregate(data = teens, female ~ cluster, mean)

# mean number of friends by cluster
aggregate(data = teens, friends ~ cluster, mean)

年齡、性別薄坏、朋友數(shù)量之間的關(guān)系表明趋厉,這些類(lèi)是有用的預(yù)測(cè)因子,以這種方式來(lái)驗(yàn)證這些類(lèi)的預(yù)測(cè)能力胶坠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末君账,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子涵但,更是在濱河造成了極大的恐慌杈绸,老刑警劉巖帖蔓,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矮瘟,死亡現(xiàn)場(chǎng)離奇詭異瞳脓,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)澈侠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)劫侧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人哨啃,你說(shuō)我怎么就攤上這事烧栋。” “怎么了拳球?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵审姓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我祝峻,道長(zhǎng)魔吐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任莱找,我火速辦了婚禮酬姆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奥溺。我一直安慰自己辞色,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布浮定。 她就那樣靜靜地躺著相满,像睡著了一般。 火紅的嫁衣襯著肌膚如雪桦卒。 梳的紋絲不亂的頭發(fā)上雳灵,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音闸盔,去河邊找鬼悯辙。 笑死,一個(gè)胖子當(dāng)著我的面吹牛迎吵,可吹牛的內(nèi)容都是我干的躲撰。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼击费,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拢蛋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起蔫巩,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤谆棱,失蹤者是張志新(化名)和其女友劉穎快压,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體垃瞧,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔫劣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了个从。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脉幢。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嗦锐,靈堂內(nèi)的尸體忽然破棺而出嫌松,到底是詐尸還是另有隱情,我是刑警寧澤奕污,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布萎羔,位于F島的核電站,受9級(jí)特大地震影響碳默,放射性物質(zhì)發(fā)生泄漏贾陷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一腻窒、第九天 我趴在偏房一處隱蔽的房頂上張望昵宇。 院中可真熱鬧,春花似錦儿子、人聲如沸瓦哎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蒋譬。三九已至,卻和暖如春愉适,著一層夾襖步出監(jiān)牢的瞬間犯助,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工维咸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留剂买,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓癌蓖,卻偏偏與公主長(zhǎng)得像瞬哼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子租副,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355