R语言聚类算法的应用实例
一家批發(fā)經(jīng)銷商想將發(fā)貨方式從每周五次減少到每周三次,簡(jiǎn)稱成本,但是造成一些客戶的不滿意,取消了提貨,帶來更大虧損,項(xiàng)目要求是通過分析客戶類別,選擇合適的發(fā)貨方式,達(dá)到技能降低成本又能降低客戶不滿意度的目的。
什么是聚類
聚類將相似的對(duì)象歸到同一個(gè)簇中,幾乎可以應(yīng)用于所有對(duì)象,聚類的對(duì)象越相似,聚類效果越好。聚類與分類的不同之處在于分類預(yù)先知道所分的類到底是什么,而聚類則預(yù)先不知道目標(biāo),但是可以通過簇識(shí)別(cluster identification)告訴我們這些簇到底都是什么。
K-means
聚類的一種,之所以叫k-均值是因?yàn)樗梢园l(fā)現(xiàn)k個(gè)不同的簇,且每個(gè)簇的中心采用簇中所含值的均值計(jì)算而成。簇個(gè)數(shù)k是用戶給定的,每一個(gè)簇通過質(zhì)心來描述。
k-means的工作流程是:
- 隨機(jī)確定k個(gè)初始點(diǎn)做為質(zhì)心
- 給數(shù)據(jù)集中的每個(gè)點(diǎn)找距其最近的質(zhì)心,并分配到該簇
- 將每個(gè)簇的質(zhì)心更新為該簇所有點(diǎn)的平均值
- 循環(huán)上兩部,直到每個(gè)點(diǎn)的簇分配結(jié)果不在改變?yōu)橹?/li>
項(xiàng)目流程 載入數(shù)據(jù)集 import pandas as pd data = pd.read_csv("customers.csv"); 分析數(shù)據(jù)
顯示數(shù)據(jù)的一個(gè)描述
from IPython.display import display display(data.discrie());分析數(shù)據(jù)是一門學(xué)問,感覺自己在這方面還需要多加練習(xí),數(shù)據(jù)描述包含數(shù)據(jù)總數(shù),特征,每個(gè)特征的均值,標(biāo)準(zhǔn)差,還有最小值、25%、50%、75%、最大值處的值,這些都可以很容易列出來,但是透過這些數(shù)據(jù)需要看到什么信息,如何與需求目的結(jié)合,最開始還是比較吃力的。可以先選擇幾個(gè)數(shù)值差異較大的樣本,然后結(jié)合數(shù)據(jù)描述和需求,對(duì)數(shù)據(jù)整體有一個(gè)把控。比如在Udacity的第三個(gè)項(xiàng)目中,給出客戶針對(duì)不同類型產(chǎn)品的年度采購額,分析猜測(cè)每個(gè)樣本客戶的類型。
數(shù)據(jù)描述
三個(gè)樣本客戶
樣本客戶
每個(gè)客戶究竟是什么類型,這個(gè)問題困擾我好久,第一次回答我只是看那個(gè)方面采購額最大,就給它一個(gè)最近的類型,提交項(xiàng)目后Reviewer這樣建議:
恍然大悟,這才知道了該如何分析一份數(shù)據(jù)集,于是有了下面的回答
回答
所以分析數(shù)據(jù)一定要結(jié)合統(tǒng)計(jì)數(shù)據(jù),四分位數(shù)和均值可以看做數(shù)據(jù)的骨架,能夠一定程度勾勒出數(shù)據(jù)的分布,可以通過箱線圖來可視化四分位數(shù)。
分析特征相關(guān)性
特征之間通常都有相關(guān)性,可以通過用移除某個(gè)特征后的數(shù)據(jù)集構(gòu)建一個(gè)監(jiān)督學(xué)習(xí)模型,用其余特征預(yù)測(cè)移除的特征,對(duì)結(jié)果進(jìn)行評(píng)分的方法來判斷特征間的相關(guān)性。比如用決策樹回歸模型和R2分?jǐn)?shù)來判斷某個(gè)特征是否必要。
如果是負(fù)數(shù),說明該特征絕對(duì)不能少,因?yàn)槿鄙倭司蜔o法擬合數(shù)據(jù)。如果是1,表示少了也無所謂,有一個(gè)跟它相關(guān)聯(lián)的特征能代替它,如果是0到1間的其他數(shù),則可以少,只是有一定的影響,越靠近0,影響越大。
也可以通過散布矩陣(scatter matrix)來可視化特征分布,如果一個(gè)特征是必須的,則它和其他特征可能不會(huì)顯示任何關(guān)系,如果不是必須的,則可能和某個(gè)特征呈線性或其他關(guān)系。
散布矩陣圖舉例
數(shù)據(jù)預(yù)處理
(一)特征縮放如果數(shù)據(jù)特征呈偏態(tài)分布,通常進(jìn)行非線性縮放。
可以發(fā)現(xiàn)散布矩陣變成了下圖
特征縮放后的散布矩陣
(二)異常值檢測(cè)通常用Tukey的定義異常值的方法檢測(cè)異常值。
移除異常值需要具體情況具體考慮,但是要謹(jǐn)慎,因?yàn)槲覀冃枰浞掷斫鈹?shù)據(jù),記錄號(hào)移除的點(diǎn)以及移除原因。可以用counter來輔助尋找出現(xiàn)次數(shù)大于1的離群點(diǎn)。
(三)特征轉(zhuǎn)換特征轉(zhuǎn)換主要用到主成分分析發(fā),請(qǐng)查看之前介紹。
聚類
有些問題的聚類數(shù)目可能是已知的,但是我們并不能保證某個(gè)聚類的數(shù)目對(duì)這個(gè)數(shù)據(jù)是最優(yōu)的,因?yàn)槲覀儗?duì)數(shù)據(jù)的結(jié)構(gòu)是不清楚的。但是我們可以通過計(jì)算每一個(gè)簇中點(diǎn)的輪廓系數(shù)來衡量聚類的質(zhì)量。數(shù)據(jù)點(diǎn)的輪廓系數(shù)衡量了分配給它的簇的相似度,范圍-1(不相似)到1(相似)。平均輪廓系數(shù)為我們提供了一種簡(jiǎn)單地度量聚類質(zhì)量的方法。下面代碼會(huì)顯示聚類數(shù)為2時(shí)的平均輪廓系數(shù),可以修改n_clusters來得到不同聚類數(shù)目下的平均輪廓系數(shù)。
?
▍需要幫助?聯(lián)系我們
?
轉(zhuǎn)載于:https://www.cnblogs.com/tecdat/p/9518514.html
總結(jié)
以上是生活随笔為你收集整理的R语言聚类算法的应用实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于FlexBox的布局
- 下一篇: pytest集成Allure Repor