閱讀對(duì)象
只要你想讀取视,你就讀唄!最好點(diǎn)個(gè)贊再走常挚。作谭。。:-)
本文盡量通過例子和直觀描述奄毡,來說明人工智能中機(jī)器學(xué)習(xí)和數(shù)據(jù)挖據(jù)的主要概念折欠,分類,和使用方法吼过,并通過例子描述如何使用它來促進(jìn)公司業(yè)務(wù)發(fā)展锐秦。雖然標(biāo)題偏技術(shù),但內(nèi)容涵蓋面較廣盗忱,涉及業(yè)務(wù)酱床,產(chǎn)品,技術(shù)等多方面趟佃。主要目的是說清楚公司如何使用數(shù)據(jù)挖據(jù)為業(yè)務(wù)提速扇谣,所以推薦的閱讀對(duì)象,是公司中高級(jí)運(yùn)營管理人員闲昭,創(chuàng)始人罐寨。但并不一定合適人工智能,數(shù)據(jù)挖據(jù)的技術(shù)專家汤纸,因?yàn)樗静簧婕叭斯ぶ悄芎蛿?shù)據(jù)挖據(jù)的底層技術(shù)衩茸,也不涉及深層次的數(shù)學(xué)原理和算法研究。
前言
近年來,人工智能楞慈,大數(shù)據(jù)是一個(gè)非常熱門的詞匯幔烛。與一些更加前沿的科技例如量子計(jì)算,神經(jīng)網(wǎng)絡(luò)囊蓝,虛擬現(xiàn)實(shí)饿悬,區(qū)塊鏈等等不同,這一類技術(shù)里面聚霜,已經(jīng)有一些分類狡恬,實(shí)實(shí)在在地被商用并且產(chǎn)生了可觀的效益。簡單地說蝎宇,本文所描述的數(shù)據(jù)挖據(jù)相關(guān)內(nèi)容弟劲,事實(shí)上就是人工智能和大數(shù)據(jù)的一種結(jié)合。
哪兒有數(shù)據(jù)挖掘哪兒就有“啤酒與尿布”姥芥, “沃爾瑪啤酒和尿布的故事”這個(gè)經(jīng)典的案例是從事這行研究的人都知道的一個(gè)故事兔乞,說的是沃爾瑪超市(Walmart)會(huì)在周末時(shí)把啤酒移到尿布貨架的未端,這是因?yàn)槲譅柆數(shù)臄?shù)據(jù)挖掘?qū)<腋嬖V老板凉唐,他們的研究結(jié)果顯示男士通常會(huì)在周末購買尿布庸追,而他們同時(shí)也喜歡在周末喝啤酒,如果放在一起那肯定會(huì)提升銷售台囱,老板照做了淡溯,結(jié)果啤酒銷售果然增加了40%以上。簿训。咱娶。很想知道這個(gè)經(jīng)典案例是真實(shí)的還是為了宣傳數(shù)據(jù)挖掘而制造的,也不知道這個(gè)案例是沃爾瑪自己說的還是別人說的煎楣,沃爾瑪有明確的官方聲明么豺总。。择懂。喻喳?
反正聽著很提神。?
現(xiàn)在世界上幾乎所有的大型公司都在使用數(shù)據(jù)挖掘困曙,并且目前尚未使用數(shù)據(jù)挖掘的公司已經(jīng)或在不久的將來表伦,就會(huì)發(fā)現(xiàn)自己處于極大的劣勢。成為Low逼是肯定的慷丽,直接失去業(yè)務(wù)機(jī)會(huì)和競爭力蹦哼,也是肯定的。
那么要糊,如何能讓我們的公司跟上數(shù)據(jù)挖掘的大潮呢纲熏?
本文匯總了四個(gè)最有用和常用的數(shù)據(jù)挖據(jù)方法,同時(shí)使用了一個(gè)叫WEKA(Waikato Environment for Knowledge Analysis)的人工智能+數(shù)據(jù)挖據(jù)研究工具(這個(gè)工具是JAVA語言開發(fā)的),來做一些實(shí)實(shí)在在的開發(fā)和演示局劲,來研究并確定一下這個(gè)沃爾瑪神話的可信性和可行性有多高勺拣。
讓我們現(xiàn)在就開始。
概念和準(zhǔn)備工作
什么是數(shù)據(jù)挖掘鱼填?
數(shù)據(jù)挖掘药有,就其核心而言,是指將大量數(shù)據(jù)轉(zhuǎn)變?yōu)橛袑?shí)際意義的模型和規(guī)則苹丸。并且愤惰,它還可以分為兩種類型:直接的和間接的。
在 直接的 數(shù)據(jù)挖掘中赘理,我們會(huì)嘗試預(yù)測一個(gè)特定的數(shù)據(jù)點(diǎn) — 比如宦言,以給定的一個(gè)房子的售價(jià)來預(yù)測鄰近地區(qū)內(nèi)的其他房子的售價(jià),或者商模,用以往的車輛銷售成交數(shù)據(jù)蜡励,來預(yù)測一輛車的成交價(jià)格或者由此制定最合理的定價(jià)。
在 間接的 數(shù)據(jù)挖掘中阻桅,公司會(huì)嘗試收集和創(chuàng)建數(shù)據(jù)群組或找到現(xiàn)有數(shù)據(jù)內(nèi)的模式 — 比如,創(chuàng)建 “中產(chǎn)階級(jí)白領(lǐng)女性人群”兼都,或者收集一批“最近5年買過某某車的用戶”嫂沉,然后去分析和預(yù)測他們的行為。
現(xiàn)代的數(shù)據(jù)挖掘開始于 20 世紀(jì) 90 年代扮碧,那時(shí)候計(jì)算的強(qiáng)大以及計(jì)算和存儲(chǔ)的成本均到達(dá)了一種很高的程度趟章,各公司開始可以自己進(jìn)行計(jì)算和存儲(chǔ),而無需再借助外界的計(jì)算幫助慎王。
此外蚓土,術(shù)語數(shù)據(jù)挖掘是全方位的,可指代諸多查看和轉(zhuǎn)換數(shù)據(jù)的技術(shù)和過程赖淤。本文只觸及能用數(shù)據(jù)挖掘?qū)崿F(xiàn)的常用功能和概念蜀漆。當(dāng)然,數(shù)據(jù)挖掘的專家往往是數(shù)據(jù)統(tǒng)計(jì)方面的博士咱旱,并在此領(lǐng)域有 N 年(10年以上)的研究經(jīng)驗(yàn)确丢。
這會(huì)給大家留下一種印象,即只有大公司才能負(fù)擔(dān)得起數(shù)據(jù)挖掘吐限。
多年來鲜侥,我腦海中經(jīng)常浮現(xiàn)《功夫熊貓》中烏龜大師的一句名言: Your mind is like this water, my friend , when it is agitated ,it becomes difficult to see ,but if you allow it to settle , the answer becomes clear. (你的思想就如同水,我的朋友诸典,當(dāng)水波搖曳時(shí)描函,很難看清,不過當(dāng)它平靜下來,答案就清澈見底了舀寓。)
思想如此胆数,很多時(shí)候,科技也是如此基公。所以幅慌,事實(shí)上數(shù)據(jù)挖據(jù)在使用上并非如此難,當(dāng)然它不像打印一張電子數(shù)據(jù)統(tǒng)計(jì)表那么簡單轰豆,但也不像有些人想的那樣難胰伍,難到靠自己或者自己公司團(tuán)隊(duì)根本無法實(shí)現(xiàn)。
其實(shí)很多時(shí)候酸休,在一個(gè)從事業(yè)務(wù)型的公司骂租,我們只需要所謂的技術(shù)專家的 10% 的專業(yè)知識(shí)就能創(chuàng)建具有 90% 效力的產(chǎn)品和服務(wù)。而無須去補(bǔ)上剩下的 10% 的服務(wù)斑司。因?yàn)槟?0%基本是沒有用戶關(guān)心的渗饮,而為了彌補(bǔ)那10%去創(chuàng)建一個(gè)完美的技術(shù)模型將需要 90% 甚至更多的額外的時(shí)間和資源投入,或者長達(dá) 10年宿刮,20 年互站,這,還是留給一些專門從事某方面研究的科技研究公司或者高校去完成吧僵缺。
“我們不生產(chǎn)水胡桃,我們只是水的搬運(yùn)工”
數(shù)據(jù)挖掘的最終目標(biāo),是要?jiǎng)?chuàng)建一個(gè)模型磕潮,這個(gè)模型可改進(jìn)解讀現(xiàn)有數(shù)據(jù)并正確預(yù)測將來的數(shù)據(jù)翠胰。在閱讀了本文章后 ,您應(yīng)該能夠自己根據(jù)自己的數(shù)據(jù)集正確決定要使用的技術(shù)自脯,然后采取必要的步驟對(duì)它進(jìn)行優(yōu)化之景。您將能夠?yàn)槟约旱臄?shù)據(jù)創(chuàng)建一個(gè)足夠好的模型。
在本文中膏潮,我們將研究四種數(shù)據(jù)挖據(jù)技術(shù)和如何在自己的JAVA系統(tǒng)中锻狗,導(dǎo)入weka.jar做數(shù)據(jù)挖掘開發(fā):
**1、 “回歸模型”及其WEKA實(shí)現(xiàn)
2焕参、 “分類模型”及其WEKA實(shí)現(xiàn)
3屋谭、 “群集/聚類模型”及其WEKA實(shí)現(xiàn)
4、 “最近鄰模型”及其WEKA實(shí)現(xiàn)
5龟糕、 將weka.jar 使用到自己的程序
我們將分別舉例子來說明這四種技術(shù)對(duì)業(yè)務(wù)的幫助桐磁。
什么是WEKA及WEKA的安裝
有一種軟件可以實(shí)現(xiàn)那些價(jià)格不菲的數(shù)據(jù)挖據(jù)商業(yè)軟件所能實(shí)現(xiàn)的全部功能 — 這個(gè)軟件就是 WEKA(請上百度搜索相關(guān)說明)。WEKA 誕生于 University of Waikato(新西蘭)并在 1997 年首次以其現(xiàn)代的格式實(shí)現(xiàn)讲岁。它使用了 GNU General Public License (GPL)我擂。該軟件以 Java? 語言編寫并包含了一個(gè)圖形界面來與數(shù)據(jù)文件交互并生成可視結(jié)果(比如表和曲線)衬以。
WEKA除了作為一個(gè)獨(dú)立PC應(yīng)用外,它居然還有一個(gè)通用 API weka.jar校摩,所以我們可以像嵌入其他的庫一樣將 WEKA 嵌入到自己的應(yīng)用程序以完成諸如服務(wù)器端自動(dòng)數(shù)據(jù)挖掘這樣的任務(wù)看峻。。衙吩。哇哇哇互妓,這應(yīng)該就是程序員最想要的,世界上總有那么一批好人提供免費(fèi)的餡餅@と7朊恪!
接下來我們來安裝 WEKA摹芙。因?yàn)樗?Java灼狰,所以如果您在計(jì)算機(jī)上沒有安裝Java環(huán)境,那么請下載一個(gè)包含 JRE 的 WEKA 版本浮禾,如果有了交胚,就下載不包含JRE的包,它會(huì)小的多盈电,不過要注意JDK版本的兼容蝴簇。
看一看,下面是我下載的安裝包(需要安裝包的自行搜索下載匆帚,別問我要哦):
我下載的時(shí)間是2018年2月份军熏,到那時(shí)為止WEKA最新版本 weka-3-8-2。
本來機(jī)器上有JKD1.7卷扮,但是安裝WEKA后報(bào)錯(cuò),版本不對(duì)均践,需要JDK1.8晤锹,于是下載了1.8。
雙擊安裝彤委,然后啟動(dòng)鞭铆,看到如下KEKA開始屏幕界面。
在啟動(dòng) WEKA 時(shí)焦影,會(huì)彈出圖形界面選擇器车遂,讓您選擇使用 WEKA 和數(shù)據(jù)的四種方式。對(duì)于本文章系列中的例子斯辰,我們只選擇了 Explorer 選項(xiàng)舶担。對(duì)于我們要在這些系列文章中所需實(shí)現(xiàn)的功能,這已經(jīng)足夠彬呻。點(diǎn) Explorer 衣陶,將看到如下界面:
在安裝和啟動(dòng) WEKA 后柄瑰,我們就可以來研究我們的人工智能 之 機(jī)器學(xué)習(xí) 之 數(shù)據(jù)挖據(jù)了。
我們來看看我們的第一個(gè)數(shù)據(jù)挖掘:回歸模型剪况。
模型一教沾。回歸模型
回歸模型的使用場景译断,一般是用來確定有某一些因素確定的某一個(gè)商品的價(jià)值授翻,比如房價(jià)的估計(jì)。
回歸是比較簡單易用的一個(gè)概念孙咪。此模型數(shù)學(xué)上是一種輸入和輸出之間的線性關(guān)系堪唐,可以簡單到只有一個(gè)輸入變量和一個(gè)輸出變量。當(dāng)然该贾,也可以遠(yuǎn)比此復(fù)雜羔杨,可以包括很多輸入變量。實(shí)際上杨蛋,所有回歸模型均符合同一個(gè)通用模式兜材。多個(gè)“自變量”綜合在一起可以生成一個(gè)結(jié)果 — 一個(gè)“因變量”。在分析大量歷史數(shù)據(jù)后生成一個(gè)回歸模型逞力,然后用這個(gè)回歸模型根據(jù)給定的這些自變量的值預(yù)測一個(gè)未知的因變量的結(jié)果曙寡。
其實(shí)我們每個(gè)人都可能使用過或看到過回歸模型,甚至曾在頭腦里創(chuàng)建過一個(gè)回歸模型寇荧。只是我們自己不這么認(rèn)為而已举庶。
在如今的社會(huì),人們能立即想到的一個(gè)例子大概是給房子定價(jià)了揩抡。房子的價(jià)格(因變量)是很多自變量 — 房子的面積户侥、占地的大小、位置峦嗤、裝修狀況等等組合的結(jié)果蕊唐。所以,不管是購買過一個(gè)房子還是銷售過一個(gè)房子烁设,我們大腦中都會(huì)創(chuàng)建一個(gè)回歸模型來為房子定價(jià)替梨。這個(gè)模型建立在鄰近地區(qū)內(nèi)的其他有可比性的房子的售價(jià)的基礎(chǔ)上(模型),然后再把新的房子的值放入此模型來產(chǎn)生一個(gè)預(yù)期價(jià)格装黑。
一個(gè)長期從事某個(gè)地區(qū)×××中介工作的人副瀑,會(huì)自然而然在大腦中形成一個(gè)正確的模型,告知他/她相關(guān)的參數(shù)恋谭,也就是告訴他/她你房子的基本情況糠睡,他/她就可以立即告訴你合理的估價(jià)。聯(lián)系到人工智能方面疚颊,這其實(shí)是一個(gè)典型機(jī)器學(xué)習(xí)(監(jiān)督學(xué)習(xí))的過程加上數(shù)據(jù)挖據(jù)的過程铜幽。
讓我們繼續(xù)以這個(gè)房屋定價(jià)的回歸模型為例滞谢,創(chuàng)建一些真實(shí)的數(shù)據(jù)。假定最近我有一個(gè)房子想要出售除抛,我試圖找到我自己房子的合理價(jià)格狮杨。我不是一個(gè)長期從事房屋交易的中介,同時(shí)因?yàn)橐恍┖侠淼脑虻胶觯膊⒉皇呛芟嘈胖薪榻o我提供的價(jià)格橄教,那將如何是好?在這里喘漏,事情將變得比較很容易护蝶,你將很容易解決這個(gè)問題。
首先翩迈,你需要通過一些途徑持灰,詢問一下你周邊鄰居或者同一個(gè)地段的房子,包括他們的價(jià)格和一些影響價(jià)格的主要因素负饲,因?yàn)槭峭粋€(gè)地段堤魁,所以影響價(jià)格的因素就相對(duì)簡單了很多。
這里先羅列匯總一下影響房價(jià)的幾個(gè)主要因素:
1返十、小區(qū)位置妥泉,小區(qū)所在的地理位置
2、樓座位置洞坑,某棟樓所在的位置
3盲链、交通情況,交通是否便利
4迟杂、小區(qū)基礎(chǔ)設(shè)施刽沾,物業(yè)和小區(qū)基礎(chǔ)設(shè)施是否好
5、周邊設(shè)施排拷,周邊生活學(xué)習(xí)是否方便
6侧漓、環(huán)境綠化,綠化程度
7攻泼、房齡,房屋年齡
8鉴象、面積忙菠,房子多大
9、房屋朝向纺弊,是否朝南
10牛欢、房座位置,位于一棟樓兩邊還是中間淆游,位于兩邊的認(rèn)為采光較好
11傍睹、裝修情況隔盛,裝修的情況
因?yàn)樵诒纠校沂窍胪ㄟ^和鄰近房子比較拾稳,來預(yù)估自己的房子價(jià)格吮炕,所以在上面11個(gè)因素中,其實(shí)只需要關(guān)心2访得、8龙亲、9、10悍抑、11三個(gè)就可以了鳄炉,因?yàn)槠渌矫娑伎梢哉J(rèn)為是一樣的。
然后我們將因素和值表示一下:
面積:具體面積數(shù)字搜骡,平方米
樓座位置:分為靠馬路1和不靠馬路2
朝向:朝南1拂盯,不朝南2
房座位置:兩邊1,中間2
裝修:1豪華记靡,2精裝谈竿,3普通,4毛坯
接下來簸呈,必須花一些時(shí)間榕订,了解了一下周邊房屋售價(jià)情況,假定獲得的數(shù)據(jù)如下蜕便。
最后那個(gè)劫恒,紅色的,假定就是我的房子轿腺,我想知道單價(jià)應(yīng)該是多少呢两嘴?
為 WEKA 構(gòu)建數(shù)據(jù)集
為了將數(shù)據(jù)加載到 WEKA,我們必須將數(shù)據(jù)放入一個(gè)我們能夠理解的格式族壳。WEKA 建議的加載數(shù)據(jù)的格式是 Attribute-Relation File Format (ARFF)憔辫,您可以在其中定義所加載數(shù)據(jù)的類型,然后再提供數(shù)據(jù)本身仿荆。在這個(gè)文件內(nèi)贰您,我們定義了每列以及每列所含內(nèi)容。對(duì)于回歸模型拢操,只能有 NUMERIC 或 DATE 列锦亦。最后,以逗號(hào)分割的格式提供每行數(shù)據(jù)令境。我們?yōu)?WEKA 使用的 ARFF 文件如下所示杠园。請注意在數(shù)據(jù)行內(nèi),并未包含我的房子舔庶。因?yàn)槲覀冊趧?chuàng)建模型抛蚁,我房子的價(jià)格還不知道陈醒,所以我當(dāng)然不能輸入我的房子说墨。
WEKA 文件格式
@RELATION house
@ATTRIBUTE size NUMERIC
@ATTRIBUTE b_pos NUMERIC
@ATTRIBUTE direct NUMERIC
@ATTRIBUTE h_pos NUMERIC
@ATTRIBUTE decorate NUMERIC
@ATTRIBUTE price NUMERIC
@DATA
88,2,1,2,2,63000
135,2,1,2,2,61500
78,1,1,2,2,63100
91,2,1,1,1,63600
54,2,2,2,3,59000
135,2,1,2,2,61200
84,2,1,2,1,63500
88,1,2,1,2,61000
155,2,1,2,2,60600
80,1,2,2,2,60800
如何將你的統(tǒng)計(jì)轉(zhuǎn)換成WEKA認(rèn)識(shí)的arff格式泊交。
你的統(tǒng)計(jì)文件最有可能的是txt,excel格式文件允蚣。
如果是如下格式的txt:
首先導(dǎo)入excel膝藕,變成如下格式:
注意第一行母怜,是你添加的屬性行咬展,然后保存為csv 格式件已。
接下來就容易了峡继,用WEKA explorer 吼虎,打開 csv文件犬钢,然后保存為 arff格式即可。我這里保存為house.arff
將數(shù)據(jù)載入 WEKA
數(shù)據(jù)創(chuàng)建完成后思灰,就可以開始創(chuàng)建我們的回歸模型了玷犹。啟動(dòng) WEKA,然后選擇 Explorer洒疚。將會(huì)出現(xiàn) Explorer 屏幕歹颓,其中 Preprocess 選項(xiàng)卡被選中。選擇 Open File 按鈕并選擇在上一節(jié)中創(chuàng)建的 house.arff 文件油湖。在選擇了文件后巍扛,WEKA Explorer 應(yīng)該類似于下圖所示的這個(gè)屏幕快照。
在這個(gè)視圖中乏德,WEKA 允許您查閱正在處理的數(shù)據(jù)撤奸。在 Explorer 窗口的左邊,給出了您數(shù)據(jù)的所有列(Attributes)以及所提供的數(shù)據(jù)行的數(shù)量(Instances)喊括。若選擇一列胧瓜,Explorer 窗口的右側(cè)就會(huì)顯示數(shù)據(jù)集內(nèi)該列數(shù)據(jù)的信息。比如郑什,通過選擇左側(cè)的 size 列(它應(yīng)該默認(rèn)選中)府喳,屏幕右側(cè)就會(huì)變成顯示有關(guān)該列的統(tǒng)計(jì)信息。它顯示了數(shù)據(jù)集內(nèi)此列的最大值為 155 平方米蘑拯,最小值為 54 平方米钝满。平均大小為 98.8 平方米,標(biāo)準(zhǔn)偏差為 31.773平方米(標(biāo)準(zhǔn)偏差是一個(gè)描述差異的統(tǒng)計(jì)量度)申窘。此外弯蚜,還有一種可視的手段來查看數(shù)據(jù),單擊 Visualize All 按鈕即可偶洋。由于在這個(gè)數(shù)據(jù)集內(nèi)的行數(shù)有限熟吏,因此可視化的功能顯得沒有更多數(shù)據(jù)點(diǎn)(比如距糖,有數(shù)百個(gè))時(shí)那么功能強(qiáng)大玄窝。
好了牵寺,對(duì)數(shù)據(jù)的介紹已經(jīng)夠多了。讓我們立即創(chuàng)建一個(gè)模型來獲得我房子的價(jià)格恩脂。
用 WEKA 創(chuàng)建一個(gè)回歸模型
為了創(chuàng)建這個(gè)模型帽氓,單擊 Classify 選項(xiàng)卡。第一個(gè)步驟是選擇我們想要?jiǎng)?chuàng)建的這個(gè)模型俩块,以便 WEKA 知道該如何處理數(shù)據(jù)以及如何創(chuàng)建一個(gè)適當(dāng)?shù)哪P停?/p>
單擊 Choose 按鈕黎休,然后擴(kuò)展 functions 分支。
選擇 LinearRegression 玉凯。
這會(huì)告訴 WEKA 我們想要構(gòu)建一個(gè)回歸模型势腮。除此之外,還有很多其他的選擇漫仆,這說明可以創(chuàng)建的的模型有很多捎拯。我們之所以選擇LinearRegression而不是SimpleLinearRegression,是因?yàn)槟壳拔覀冞@個(gè)模型有五個(gè)變量盲厌,需要輸出一個(gè)因變量署照。回歸分析中吗浩,只包括一個(gè)自變量和一個(gè)因變量建芙,且二者的關(guān)系可用一條直線近似表示,這種回歸分析稱為一元線性回歸分析懂扼。如果回歸分析中包括兩個(gè)或兩個(gè)以上的自變量禁荸,且因變量和自變量之間是線性關(guān)系,則稱為多元線性分析微王。很明顯我們這個(gè)是多元的。
選擇了正確的模型后钧大,WEKA Explorer 應(yīng)該類似于下圖啊央。
現(xiàn)在涨醋,選擇了想要的模型后浴骂,我們必須告訴 WEKA 它創(chuàng)建這個(gè)模型應(yīng)該使用的數(shù)據(jù)在哪里。雖然很顯然我們想要使用在 ARFF 文件內(nèi)提供的那些數(shù)據(jù)趣苏,但實(shí)際上有不同的選項(xiàng)可供選擇狡相,有些甚至遠(yuǎn)比我們將要使用的選項(xiàng)高級(jí)。其他的三個(gè)選擇是:Supplied test set 允許提供一個(gè)不同的數(shù)據(jù)集來構(gòu)建模型食磕; Cross-validation 讓 WEKA 基于所提供的數(shù)據(jù)的子集構(gòu)建一個(gè)模型尽棕,然后求出它們的平均值來創(chuàng)建最終的模型;Percentage split WEKA 取所提供數(shù)據(jù)的百分之一來構(gòu)建一個(gè)最終的模型彬伦。這些不同的選擇對(duì)于不同的模型非常有用滔悉,我們在本系列后續(xù)文章中會(huì)看到這一點(diǎn)。對(duì)于回歸单绑,我們可以簡單地選擇 Use training set回官。這會(huì)告訴 WEKA 為了構(gòu)建我們想要的模型,可以使用我們在 ARFF 文件中提供的那些數(shù)據(jù)搂橙。
創(chuàng)建模型的最后一個(gè)步驟是選擇因變量(即我們想要預(yù)測的列)孙乖。在本例中指的就是房屋的銷售單價(jià),因?yàn)槟钦俏覀兿胍姆菅酢T谶@些測試選項(xiàng)的正下方唯袄,有一個(gè)組合框,可用它來選擇這個(gè)因變量蜗帜。列 price 應(yīng)該默認(rèn)選中恋拷。
我們準(zhǔn)備好創(chuàng)建模型后蔬顾,單擊 Start诀豁。下圖顯示了輸出結(jié)果。
放大,直接看模型公式:
讓我們來算算我那個(gè)房子的單價(jià):
price =
-21.7669?105 +
-818.8863?
1 +
-2457.072?1 +
-1346.4475?
1 +
71025.121 = 64094 元
數(shù)據(jù)挖掘絕不是僅僅是為了輸出一個(gè)數(shù)值:它關(guān)乎的是識(shí)別模式和規(guī)則。它不是嚴(yán)格用來生成一個(gè)絕對(duì)的數(shù)值峦树,而是要?jiǎng)?chuàng)建一個(gè)模型來讓您探測模式络它、預(yù)測輸出并根據(jù)這些數(shù)據(jù)得出結(jié)論单料。讓我們更進(jìn)一步來解讀一下我們的模型除了房屋價(jià)格之外告訴我們的模式和結(jié)論:
? 房坐位置無關(guān)緊要?— WEKA 將只使用在統(tǒng)計(jì)上對(duì)模型的正確性有貢獻(xiàn)的那些列白对。它將會(huì)拋棄并忽視對(duì)創(chuàng)建好的模型沒有任何幫助的那些列。所以這個(gè)回歸模型告訴我們条摸,房子處于一棟樓的兩邊還是中間,似乎并不會(huì)影響房子的價(jià)格顷啼。就我個(gè)人的經(jīng)驗(yàn)是,兩邊的房子比較明亮通透躬厌,但也面臨著墻壁更容易漏水的危險(xiǎn)。
? 裝修的影響是非常大的?— 看看裝修數(shù)字對(duì)房價(jià)的影響就知道了,隨著數(shù)字增大,也就是裝修質(zhì)量變差昌阿,房價(jià)是嘩嘩往下降啊灶轰。為什么我的房子那么貴,豪裝鞍槌巍!有道理!喉悴!
? 較大的房子單價(jià)反而低?— WEKA 告訴我們房子越大,銷售單價(jià)越低突雪?這可以從 size 變量前面負(fù)的系數(shù)看出來。此模型告訴我們房子每多出一平方米都會(huì)使房單價(jià)減少 21元督函,雖然影響的并不明顯,但的確如此宛篇。這個(gè)怎么說呢偷卧,正確的應(yīng)該說是在一定范圍之外,比如超過某個(gè)面積后晌梨,的確是單價(jià)會(huì)隨著房屋面積變大而變小,按照經(jīng)驗(yàn)這個(gè)情況是存在的师逸,因?yàn)榭們r(jià)高么动知。
回歸模型結(jié)束語
本章探討了第一個(gè)數(shù)據(jù)挖掘模型:回歸模型(特指線性回歸多變量模型),另外還展示了如何在 WEKA 中使用它丹皱。這個(gè)回歸模型很容易使用,并且可以用于很多數(shù)據(jù)集。您會(huì)發(fā)現(xiàn)這個(gè)模型是我們?nèi)粘9ぷ魃钪凶钣杏玫囊粋€(gè)根时。
然而,數(shù)據(jù)挖掘不僅局限于簡單的回歸忘苛,在不同的數(shù)據(jù)集及不同的輸出要求的情況下召川,您會(huì)發(fā)現(xiàn)其他的模型也許是更好的解決方案。接下來我們看看其它模型倍阐。
模型二。分類模型
分類模型的使用場景,是根據(jù)已有的屬性和分類結(jié)果的歷史記錄鞠柄,生成一個(gè)模型,這個(gè)模型能對(duì)新的已知屬性但不知道分類的用戶夯尽,物品或商品推算出其分類結(jié)果。所以我們這里的分類模型生成,是屬于監(jiān)督學(xué)習(xí)赠堵。
說到分類,就會(huì)說到?jīng)Q策樹揍愁。決策樹是一種十分常用的和直觀的方法分類方法谬擦。它是一種監(jiān)督學(xué)習(xí),所謂監(jiān)督學(xué)習(xí)就是給定一堆樣本北秽,每個(gè)樣本都有一組屬性和一個(gè)類別,這些類別是事先確定的,那么通過學(xué)習(xí)得到一個(gè)分類器虏冻,這個(gè)分類器能夠?qū)π鲁霈F(xiàn)的對(duì)象給出正確的分類领曼。
決策樹的思維毁渗,其實(shí)在我們?nèi)粘9ぷ骱退伎贾校紩?huì)存在肺樟。。俐巴。比如一個(gè)有經(jīng)驗(yàn)的推銷人員,看到一個(gè)用戶邻遏,通過一眼觀察和簡單聊天,就能推算出這個(gè)用戶有沒有可能轉(zhuǎn)換成自己的客戶糊饱。在比如,當(dāng)有人給適婚男女介紹一個(gè)朋友的時(shí)候夭坪,他們的腦子里面都會(huì)有類似如下的決策樹來考慮要不要見見:
當(dāng)簡單的現(xiàn)象上升到高科技層面的時(shí)候,決策樹就會(huì)有很多種算法:CHAID,CART,C4.5,C5.0。不過決策樹的核心理論都其實(shí)差不多敷待,本文不去研究每個(gè)算法的實(shí)現(xiàn)而是通過例子,去使用和比較這些算法思劳。
首先舉個(gè)最簡的的決策樹例子:
假定有如下11個(gè)人的完整資料如下,現(xiàn)在需要判斷第12個(gè)人钠导,是東方人還是西方人票堵?
首先,我們根據(jù)前面11個(gè)人的資料,生成一個(gè)決策樹侥加,如下:
或者入下:
然后把第12個(gè)人的資料提前,按照他的屬性代入這兩個(gè)棵決策樹中間的任何一棵宙搬,結(jié)果就會(huì)發(fā)現(xiàn)扇雕,這個(gè)人是西方人础淤。
再次說明鸽凶,我們不討論這棵樹的實(shí)現(xiàn)方法,現(xiàn)實(shí)中的決策也不會(huì)那么簡單凑兰,用于生成決策樹的歷史記錄也不會(huì)那么少波岛。如何根據(jù)已經(jīng)有的資料则拷,生成最合理的決策樹煌茬,是算法需要考慮的問題叛薯,WEKA就是專門做這個(gè)事情的组力,等會(huì)我們再舉例說明。
我們這里需要了解的是,各種分類算法蛉鹿,哪種分類算法生成的決策樹领追,最符合我們的需要棕孙,還有就是,生成的決策樹模型职抡,其分類正確率是多少窑邦,是否符合公司的業(yè)務(wù)需要和場景。
下面我們用工具WEKA冈钦,嘗試建立一個(gè)較為復(fù)雜的決策樹模型郊丛。
打開WEKA,載入其安裝目錄下面 data目錄下的 iris.arff
這是一個(gè)經(jīng)典的鳶尾花分類決策樹例子瞧筛。
鳶尾花有三種類型:setosa,versicolor,virginica這三種類型基本上靠其花瓣和花萼的四種外形來決定厉熟。下面是 arff 文件的例子截圖:
載入 iris.arff
選擇Classify 揍瑟,選擇tree - J48分類算法
在 Test options 下面槐瑞,選擇 Cross-validation ,F(xiàn)olds填寫10拉讯,這個(gè)表示生成模型后交叉驗(yàn)證模型。WEKA會(huì)將數(shù)據(jù)分成10份栋盹,一份用于生成決策樹模型件余,一份用來驗(yàn)證正確度。
在生成決策樹模型中照捡,一般會(huì)需要選擇Cross-validation ,通過對(duì)未知數(shù)據(jù)的預(yù)測結(jié)果驗(yàn)證馏慨,來驗(yàn)證模型的通用性秩贰。
一切設(shè)定好后溪厘,按“Start”。胸梆。课兄。界面如下:
最需要了解的是這一條信息:
這表示這個(gè)模型分類正確率是 96% 润讥,應(yīng)該是比較高的了。
我們再來直觀地看看WEKA生成的樹吧:
分類模型結(jié)束語
決策樹或者分類樹就是要?jiǎng)?chuàng)建一個(gè)具有分支献联、節(jié)點(diǎn)和枝葉的樹,能夠讓我們拿一個(gè)未知的數(shù)據(jù)點(diǎn),將此數(shù)據(jù)點(diǎn)的屬性應(yīng)用到這個(gè)樹并順著這個(gè)樹下移棺蛛,直到到達(dá)一個(gè)葉子并且數(shù)據(jù)點(diǎn)的未知輸出可以斷定鲸湃。為了創(chuàng)建一個(gè)好的分類樹模型酱吝,我們必須要有一個(gè)輸出已知的現(xiàn)有數(shù)據(jù)集,從這個(gè)數(shù)據(jù)集才能構(gòu)建我們的模型。我們還看到了我們需要將我們的數(shù)據(jù)集分成兩個(gè)部分:一個(gè)用來創(chuàng)建模型的訓(xùn)練集 鹰祸;一個(gè)用來驗(yàn)證模型是否正確且沒有過擬合的測試集滚朵。因?yàn)樵谀承r(shí)候席噩,即便是創(chuàng)建了一個(gè)自己認(rèn)為正確的數(shù)據(jù)模型渔期,它也可能不正確产镐,所以需要驗(yàn)證玻孟。
在有些時(shí)候弄痹,我們也有可能必須要摒棄原來的整個(gè)模型和算法以尋找更好的模型和算法解決方案。因?yàn)橛袝r(shí)候同一個(gè)業(yè)務(wù)目標(biāo)历极,其實(shí)可以有不同的數(shù)據(jù)挖掘方法窄瘟,這個(gè)我們會(huì)在第三章 - 最近鄰算法里面提到并作一些比較。
模型三趟卸。群集模型(聚類模型)
對(duì)于一般的用戶蹄葱,群集有可能是最為有用的一種數(shù)據(jù)挖掘方法。它可以迅速地將整個(gè)數(shù)據(jù)集分成組锄列,讓我們快速發(fā)現(xiàn)并且提取某個(gè)組的共同特征图云,快速得出結(jié)論和做相應(yīng)的改善。個(gè)人覺得邻邮,群集模型對(duì)于商業(yè)拓展和業(yè)務(wù)竣况、產(chǎn)品指導(dǎo)方面,肯定是最有效的數(shù)據(jù)挖掘模型之一饶囚。
就人工智能而言帕翻,群集模型屬于非監(jiān)督算法,也就是我們采集或者獲得一組數(shù)據(jù)后萝风,雖然對(duì)這個(gè)數(shù)據(jù)有一定了解嘀掸,但也許并不知道它應(yīng)該怎么分類,也不知道這些數(shù)據(jù)有哪些特征规惰,這也是使用群集模型的一個(gè)難點(diǎn)睬塌。
所以,使用群集的一個(gè)主要劣勢是用戶需要提前知道他想要?jiǎng)?chuàng)建的組的數(shù)量。若用戶對(duì)其數(shù)據(jù)知之甚少揩晴,這可能會(huì)很困難勋陪。是應(yīng)該創(chuàng)建三個(gè)組?五個(gè)組硫兰?還是十個(gè)組诅愚?所以在決定要?jiǎng)?chuàng)建的理想組數(shù)之前,可能需要進(jìn)行幾個(gè)步驟的嘗試和出錯(cuò)劫映。這要求用戶對(duì)采集的數(shù)據(jù)目的比較明確违孝。
就算法而言,簡單說來泳赋,群集或聚類算法核心雌桑,是通過計(jì)算各個(gè)數(shù)據(jù)之間的距離,將距離比較近的數(shù)據(jù)歸在一起祖今。當(dāng)然校坑,說起來比較簡單,實(shí)現(xiàn)起來不是那么簡單千诬。有一個(gè)比較簡單的例子耍目,可以幫助我們了解集群的算法核心:
上圖是平面坐標(biāo)里面的6個(gè)點(diǎn),分成兩個(gè)組大渤。如果通過我們的眼睛來看制妄,憑經(jīng)驗(yàn)判斷,那是非常簡單了泵三,左下角三個(gè)點(diǎn)一組,右上角三個(gè)點(diǎn)一組衔掸,一秒鐘的事情烫幕。如果要通過群集算法怎么實(shí)現(xiàn)呢?下面就是步驟:
1.選擇初始大哥:
我們就選P1和P2
2.計(jì)算小弟和大哥的距離:
P3到P1的距離從圖上也能看出來(勾股定理)敞映,是√10 = 3.16较曼;P3到P2的距離√((3-1)^2+(1-2)^2 = √5 = 2.24,所以P3離P2更近振愿,P3就跟P2混捷犹。同理,P4冕末、P5萍歉、P6也這么算,如下:
P3到P6都跟P2更近档桃,所以第一次站隊(duì)的結(jié)果是:
? 組A:P1
? 組B:P2枪孩、P3、P4、P5蔑舞、P6
3.人民代表大會(huì):
組A沒啥可選的拒担,大哥還是P1自己
組B有五個(gè)人,需要選新大哥攻询,這里要注意選大哥的方法是每個(gè)人X坐標(biāo)的平均值和Y坐標(biāo)的平均值組成的新的點(diǎn)从撼,為新大哥,也就是說這個(gè)大哥是“虛擬的”钧栖。
因此谋逻,B組選出新大哥的坐標(biāo)為:P哥((1+3+8+9+10)/5,(2+1+8+10+7)/5)=(6.2桐经,5.6)毁兆。
綜合兩組,新大哥為P1(0阴挣,0)气堕,P哥(6.2,5.6)畔咧,而P2-P6重新成為小弟
4.再次計(jì)算小弟到大哥的距離:
這時(shí)可以看到P2茎芭、P3離P1更近,P4誓沸、P5梅桩、P6離P哥更近,所以第二次站隊(duì)的結(jié)果是:
? 組A:P1拜隧、P2宿百、P3
? 組B:P4、P5洪添、P6(虛擬大哥這時(shí)候消失)
5.第二屆人民代表大會(huì):
按照上一屆大會(huì)的方法選出兩個(gè)新的虛擬大哥:P哥1(1.33垦页,1) P哥2(9,8.33)干奢,P1-P6都成為小弟
6.第三次計(jì)算小弟到大哥的距離:
這時(shí)可以看到P1痊焊、P2、P3離P哥1更近忿峻,P4薄啥、P5、P6離P哥2更近逛尚,所以第二次站隊(duì)的結(jié)果是:
? 組A:P1垄惧、P2、P3
? 組B:P4黑低、P5赘艳、P6
我們發(fā)現(xiàn)酌毡,這次站隊(duì)的結(jié)果和上次沒有任何變化了,說明已經(jīng)收斂蕾管,聚類結(jié)束枷踏,聚類結(jié)果和我們最開始設(shè)想的結(jié)果完全一致。
以上就是群集或者聚類算法的基本思想掰曾。
WEKA演示
加載數(shù)據(jù)文件 bank.arff
選擇Cluster選項(xiàng)旭蠕,然后選擇 SimpleKMeans算法。
點(diǎn)算法選擇框旷坦,在彈出框的 numClusters 里面輸入6 掏熬,表示生成6個(gè)組。
然后按Start秒梅,可以看到輸出結(jié)果如下:
這里我們很快會(huì)不可避免地提出兩個(gè)問題旗芬,第一,我們怎么知道將數(shù)據(jù)集分成幾個(gè)組呢捆蜀,第二疮丛,分成不同組以后,怎么去分析不同組的特性辆它,并發(fā)現(xiàn)規(guī)律呢誊薄?
我也不是很清楚,比如上面的分組锰茉,我對(duì)銀行業(yè)務(wù)沒有了解呢蔫,所以實(shí)在是的不出什么結(jié)論。網(wǎng)上有這么一段話可以參考飒筑。
在聚類數(shù)據(jù)挖掘中片吊,業(yè)務(wù)專家的作用非常大,主要體現(xiàn)在聚類變量的選擇和對(duì)于聚類結(jié)果的解讀:
比如要對(duì)于現(xiàn)有的客戶分群扬霜,那么就要根據(jù)最終分群的目的選擇不同的變量來分群定鸟,這就需要業(yè)務(wù)專家經(jīng)驗(yàn)支持。如果要優(yōu)化客戶服務(wù)的渠道著瓶,那么就應(yīng)選擇與渠道相關(guān)的數(shù)據(jù);如果要推廣一個(gè)新產(chǎn)品啼县,那就應(yīng)該選用用戶目前的使用行為的數(shù)據(jù)來歸類用戶的興趣材原。算法是無法做到這一點(diǎn)的
欠缺經(jīng)驗(yàn)的分析人員和經(jīng)驗(yàn)豐富的分析人員對(duì)于結(jié)果的解讀會(huì)有很大差異。其實(shí)不光是聚類分析季眷,所有的分析都不能僅僅依賴統(tǒng)計(jì)學(xué)家或者數(shù)據(jù)工程師余蟹。
下面有一個(gè)群集的例子,帶有分組業(yè)務(wù)分析子刮。
話說有一家寶馬經(jīng)銷店威酒。這個(gè)經(jīng)銷店保留了人們?nèi)绾卧诮?jīng)銷店以及展廳行走窑睁、他們看了哪些車以及他們最終購車的機(jī)率的記錄。經(jīng)銷店期望通過尋找數(shù)據(jù)內(nèi)的模式挖掘這些數(shù)據(jù)并使用群集來判斷其客戶是否有某種行為特點(diǎn)葵孤。歷史記錄中有 100 行數(shù)據(jù)担钮,并且每個(gè)列都描述了顧客在他們各自的 BMW 體驗(yàn)中所到達(dá)的步驟,比如列中的 1 表示到達(dá)這一步的顧客看過這輛車尤仍,0 表示他們不曾到達(dá)看過車的這一步箫津。下面清單顯示了在 WEKA 中所使用的 ARFF 數(shù)據(jù)。
@attribute Dealership numeric
@attribute Showroom numeric
@attribute ComputerSearch numeric
@attribute M5 numeric
@attribute 3Series numeric
@attribute Z4 numeric
@attribute Financing numeric
@attribute Purchase numeric
@data
1,0,0,0,0,0,0,0
1,1,1,0,0,0,1,0
經(jīng)過一番操作后宰啦,得到下面的輸出:
下面是業(yè)務(wù)分析:
群集 0— 這個(gè)組我們可以稱之為 “Dreamers”苏遥,因他們圍著經(jīng)銷店徘徊,查看在停車場上停著的車赡模,卻不步入店面內(nèi)田炭,且更糟的是,他們沒有購買過任何東西漓柑。
群集 1— 我們將這一組稱為是 “M5 Lovers”教硫,因?yàn)樗麄兂3?huì)徑直走到 M5 車型區(qū),對(duì) 3-系列的車型和 Z4 均視而不見欺缘。不過栋豫,他們也沒有多高的購買率 — 只有 52 %。這表明存在潛在問題谚殊,也是經(jīng)銷店今后改進(jìn)的重點(diǎn)丧鸯,比如可以派更多的銷售人員到 M5 區(qū)。
群集 2— 這個(gè)組很小嫩絮,我們可以稱之為 “Throw-Aways”丛肢,因?yàn)樗麄儧]有統(tǒng)計(jì)意義上的相關(guān)性,我們也不能從其行為得出任何好的結(jié)論剿干。(這種情況若在群集上發(fā)生蜂怎,可能表明應(yīng)該減少所創(chuàng)建的群集的數(shù)量。)
群集 3— 這個(gè)組置尔,我們稱之為 “BMW Babies”杠步,因?yàn)樗麄兛偸菚?huì)購買一輛車而且還會(huì)支付車款。正是在這里榜轿,數(shù)據(jù)向我們顯示了一些有趣的事情:他們一般會(huì)在停車場內(nèi)查看各種車型幽歼,然后返回到經(jīng)銷店內(nèi)的計(jì)算機(jī)處搜索中意的車型是否有貨。他們最終會(huì)購買 M5 或 Z4 車型(但從不購買 3-系列的)谬盐。這個(gè)群集告訴經(jīng)銷店它應(yīng)該考慮讓它的搜索計(jì)算機(jī)在停車場處就能很容易地被看到(或安置一臺(tái)室外的搜索計(jì)算機(jī))甸私,并且讓 M5 或 Z4 在搜索結(jié)果中更為醒目。一旦顧客決定購買汽車飞傀,他總是符合購車款的支付條件并能夠圓滿完成這次購買皇型。
群集 4— 這個(gè)組我們將稱之為 “Starting Out With BMW”诬烹,因?yàn)樗麄兛偸强?3-系列的車型,從不看貴很多的 M5弃鸦。他們會(huì)徑直步入展廳绞吁,而不會(huì)在停車場處東看西看,而且也不會(huì)使用計(jì)算機(jī)搜索終端寡键。他們中有 50 % 會(huì)到達(dá)支付車款的階段掀泳,但只有 32 % 會(huì)最終成交。經(jīng)銷店可以得出這樣的結(jié)論:這些初次購買 BMW 車的顧客知道自己想要的車型是哪種( 3-系列的入門級(jí)車型)而且希望能夠符合購車款的支付條件以便買得起西轩。經(jīng)銷店可以通過放松購車款的支付條件或是降低 3- 系列車型的價(jià)格來提高這一組的銷售员舵。
群集模型結(jié)束語
總覺得“分類”和“聚類”,往往可以配合使用藕畔。我們做一下發(fā)散性思維马僻。
考慮上面提到的寶馬經(jīng)銷店,如果是一家不差錢的大型店注服,我們考慮設(shè)置這么一套系統(tǒng)韭邓。
在店門口和店內(nèi),幾個(gè)重要的點(diǎn)安裝上人臉自動(dòng)之別系統(tǒng)溶弟,此系統(tǒng)同時(shí)和銀行或者政府個(gè)人資料庫關(guān)聯(lián)女淑,當(dāng)一個(gè)人經(jīng)過的時(shí)候,可以自動(dòng)識(shí)別身份辜御,并且瞬間獲知其年齡鸭你,收入碑韵,婚姻截粗,×××等等信息。采集這些信息昵观,并且記錄此人從店門口經(jīng)過開始到入店(也可能不進(jìn)店)碳抄,離開店的全部過程愉老。后面對(duì)接一個(gè)“群集模型”和“分類模型”數(shù)據(jù)挖掘系統(tǒng)。
我們不難想象剖效,這個(gè)經(jīng)銷商店可以在經(jīng)銷方面做到多么細(xì)致嫉入。馬路上走過來一個(gè)人,立馬可以計(jì)算出他/她對(duì)什么最有可能購買璧尸,并且知道他/她當(dāng)前的經(jīng)濟(jì)情況劝贸,合適推薦什么相關(guān)服務(wù)和金融方案。對(duì)店內(nèi)的設(shè)備和布置來說逗宁,可以根據(jù)集群得出的結(jié)論,正確設(shè)計(jì)展臺(tái)梦湘,選擇展品車型瞎颗,布局各種展品的位置件甥,增加一些有趣味的高科技設(shè)計(jì),采取多種方法提高進(jìn)店率等等哼拔。
永遠(yuǎn)不要忘記引有,我們使用“數(shù)據(jù)挖掘”的目的是為了服務(wù)于業(yè)務(wù)這一個(gè)基本點(diǎn)。
模型四倦逐。最近鄰模型
最近鄰思想的提出和應(yīng)用場景非常典型譬正,假定一個(gè)客戶登錄了某購物網(wǎng)站,我們怎么給他/她推薦商品呢檬姥?或者說我們怎么知道他/她最有可能買什么商品呢曾我?
假定現(xiàn)在手里有下面這些顧客購買的歷史數(shù)據(jù):
Customer Age Income Purchased Product
1 45 46k Book
2 39 100k TV
3 35 38k DVD
4 69 150k Car Cover
現(xiàn)在提出一個(gè)問題,下面第5個(gè)客戶健民,最有可能購買什么商品抒巢?
5 58 51k ???
結(jié)局這個(gè)問題,就要用到“最近鄰”的思想秉犹,我們需要考慮這第五個(gè)客戶蛉谜,和哪個(gè)客戶最相似,和哪個(gè)客戶最相似崇堵,我們認(rèn)為他就會(huì)購買一樣的商品型诚。
步驟1: Determine Distance Formula/確定一個(gè)距離計(jì)算公式
Distance = SQRT( ((58 - Age)/(69-35))^2) + ((51000 - Income)/(150000-38000))^2 )
步驟2: Calculate the Score/計(jì)算每個(gè)客戶和新客戶的距離分?jǐn)?shù)
Customer Score Purchased Product
1 .385 Book
2 .710 TV
3 .686 DVD
4 .941 Car Cover
5 0.0 ???
現(xiàn)在我們就可以回答“第 5 個(gè)顧客最有可能購買什么產(chǎn)品”這一問題,答案第5個(gè)客戶將最有可能買的是一本書鸳劳。這是因?yàn)榈?5 個(gè)顧客與第 1 個(gè)顧客之間的距離要比第 5 個(gè)顧客與其他任何顧客之間的距離都短(實(shí)際上是短很多)狰贯。基于這個(gè)模型棍辕,可以得出這樣的結(jié)論:由最像第 5 個(gè)顧客的顧客可以預(yù)測出第 5 個(gè)顧客的行為暮现。
不過,最近鄰的好處遠(yuǎn)不止于此楚昭。最近鄰算法可被擴(kuò)展成不僅僅限于一個(gè)最近匹配栖袋,而是可以包括任意數(shù)量的最近匹配「可將這些最近匹配稱為是 “N-最近鄰”(比如 3-最近鄰)塘幅。回到上述的例子尿贫,如果我們想要知道第 5 個(gè)顧客最有可能購買的兩個(gè)產(chǎn)品电媳,那么這次的結(jié)論以此是書和 DVD。而對(duì)于我們曾經(jīng)提到的亞馬遜的例子庆亡,如果想要知道某個(gè)顧客最有可能購買的 12 個(gè)產(chǎn)品匾乓,就可以運(yùn)行一個(gè) 12-最近鄰算法(但亞馬遜實(shí)際運(yùn)行的算法要遠(yuǎn)比一個(gè)簡單的 12-最近鄰算法復(fù)雜)。
下面我們用分類模型同樣的數(shù)據(jù)集合又谋,來驗(yàn)證一下其在“最近鄰”模型下面的正確率拼缝。
載入鳶尾花 iris.arff 娱局,然后選擇算法 lazy – Ibk,結(jié)果如下:
最近鄰模型下的正確率為 95.33%咧七,接近與用“J48分類”算法的正確率衰齐。
而且我把K調(diào)到了6,發(fā)現(xiàn)正確率變高了继阻,如下圖:
正確率達(dá)到了 96.7%耻涛。
最近鄰模型結(jié)束語
我們在例子中用到的k近鄰法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一種基本分類與回歸方法。它的工作原理是:存在一個(gè)樣本數(shù)據(jù)集合瘟檩,也稱作為訓(xùn)練樣本集抹缕,并且樣本集中每個(gè)數(shù)據(jù)都存在標(biāo)簽,即我們知道樣本集中每一個(gè)數(shù)據(jù)與所屬分類的對(duì)應(yīng)關(guān)系芒帕。輸入沒有標(biāo)簽的新數(shù)據(jù)后歉嗓,將新的數(shù)據(jù)的每個(gè)特征與樣本集中數(shù)據(jù)對(duì)應(yīng)的特征進(jìn)行比較,然后算法提取樣本最相似數(shù)據(jù)(最近鄰)的分類標(biāo)簽背蟆。一般來說鉴分,我們只選擇樣本數(shù)據(jù)集中前k個(gè)最相似的數(shù)據(jù),這就是k-近鄰算法中k的出處带膀,通常k是不大于20的整數(shù)志珍。最后,選擇k個(gè)最相似數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類垛叨,作為新數(shù)據(jù)的分類伦糯。
回到剛開始提到的應(yīng)用場景,假定我們有一個(gè) 2000 萬用戶的購物平臺(tái)嗽元,此算法將非常準(zhǔn)確敛纲,因?yàn)閿?shù)據(jù)庫中與某用戶有著類似購買習(xí)慣的潛在客戶很多。最近鄰會(huì)非常相似剂癌。因而淤翔,所創(chuàng)建的模型會(huì)十分準(zhǔn)確和高效。相反佩谷,如果能比較的數(shù)據(jù)點(diǎn)相對(duì)很少的話旁壮,這個(gè)模型很快就會(huì)損壞,不再準(zhǔn)確谐檀。在線電子商務(wù)店鋪的初期抡谐,比如只有 50 個(gè)顧客,那么產(chǎn)品推薦特性很可能一點(diǎn)都不準(zhǔn)確桐猬,因?yàn)樽罱弻?shí)際上與您本身相差甚遠(yuǎn)麦撵。
最近鄰技術(shù)可能存在的一個(gè)挑戰(zhàn)是該算法的計(jì)算成本有可能會(huì)很高。在一個(gè)很大的平臺(tái)的例子中,比如對(duì)于有 2000 萬客戶的平臺(tái)厦坛,每個(gè)新客戶都必須針對(duì)其他的 2000 萬客戶進(jìn)行計(jì)算以便找到最近鄰五垮。首先,如果我們的業(yè)務(wù)也有 2000 萬的客戶群杜秸,那么這便不成問題,因?yàn)槟鷷?huì)財(cái)源廣進(jìn)润绎。其次撬碟,這種類型的計(jì)算非常適合用云來完成,因?yàn)樗鼈兡軌虮环稚⒌皆S多計(jì)算機(jī)上同時(shí)完成莉撇,并最終完成比較(比如MapReduce)呢蛤。不過,實(shí)際上如果我只是購買了一本書棍郎,那么根本不必針對(duì)我對(duì)比數(shù)據(jù)庫內(nèi)的2000萬個(gè)客戶其障。只需將我與其他的購書者進(jìn)行對(duì)比來尋找最佳匹配,這樣一來涂佃,就將潛在的鄰縮小到整個(gè)數(shù)據(jù)庫的一部分励翼。
最后部分。如何用weka.jar直接寫程序
上面我們用到WEKA做一些例子有演示辜荠,但作為開發(fā)者來說汽抚,WEKA 最酷的一件事情是它不僅是一個(gè)獨(dú)立的應(yīng)用程序,而且還是一個(gè)完備的 Java JAR 文件伯病,可以將其投入到您服務(wù)器的 lib 文件夾并從您自己的JAVA應(yīng)用代碼進(jìn)行調(diào)用造烁。
這能為我們的應(yīng)用程序帶來很多實(shí)用的、和重要的功能午笛。您可以添加充分利用了我們到目前所學(xué)的全部數(shù)據(jù)挖掘技術(shù)的報(bào)告惭蟋。您可以為您的電子商務(wù)網(wǎng)站/平臺(tái)創(chuàng)建一個(gè)“產(chǎn)品推薦”小部件,類似于亞馬遜站點(diǎn)上的那個(gè)药磺。
現(xiàn)在告组,我們應(yīng)該看看如何將它集成到您的自己代碼中。
實(shí)際上与涡,我們已經(jīng)下載了這個(gè) WEKA API JAR惹谐,你可以在安裝目錄中找到它 weka.jar它就是您啟動(dòng) WEKA Explorer 時(shí)調(diào)用的那個(gè) JAR 文件。為了訪問此代碼驼卖,讓您的 Java 環(huán)境在此類路徑中包含這個(gè) JAR 文件氨肌。在您自己的代碼中使用第三方 JAR 文件的步驟如常。
正如您所想酌畜,WEKA API 內(nèi)的這個(gè)中心構(gòu)建塊就是數(shù)據(jù)怎囚。數(shù)據(jù)挖掘圍繞此數(shù)據(jù)進(jìn)行,當(dāng)然所有我們已經(jīng)學(xué)習(xí)過的這些算法也都是圍繞此數(shù)據(jù)的。
那么讓我們看看如何將我們的數(shù)據(jù)轉(zhuǎn)換成 WEKA API 可以使用的格式恳守。讓我們從簡單的開始考婴,先來看看本系列有關(guān)房子定價(jià)的第一篇文章中的那些數(shù)據(jù)。
一.加載數(shù)據(jù)
// 定義數(shù)據(jù)屬性
Attribute a1 = new Attribute("houseSize", 0);
Attribute a2 = new Attribute("lotSize", 1);
Attribute a3 = new Attribute("bedrooms", 2);
Attribute a4 = new Attribute("granite", 3);
Attribute a5 = new Attribute("bathroom", 4);
Attribute a6 = new Attribute("sellingPrice", 5);
// 加載屬性
FastVector attrs = new FastVector();
attrs.addElement(a1);
attrs.addElement(a2);
attrs.addElement(a3);
attrs.addElement(a4);
attrs.addElement(a5);
attrs.addElement(a6);
// 加載一條或者多條數(shù)據(jù).
Instance i1 = new Instance(6);
i1.setValue(a1, 3529);
i1.setValue(a2, 9191);
i1.setValue(a3, 6);
i1.setValue(a4, 0);
i1.setValue(a5, 0);
i1.setValue(a6, 205000);
....
Instances dataset = new Instances("housePrices", attrs, 7);
dataset.add(i1);
dataset.add(i2);
dataset.add(i3);
dataset.add(i4);
dataset.add(i5);
dataset.add(i6);
dataset.add(i7);
… …
//設(shè)定輸出變量催烘,
dataset.setClassIndex(dataset.numAttributes() - 1);
假定現(xiàn)在我們已經(jīng)將數(shù)據(jù)載入了 WEKA沥阱。看起來比較麻煩一點(diǎn)伊群,但這里只是個(gè)演示考杉,我們可以看到編寫自己的包裝器類來快速從數(shù)據(jù)庫或者文件提取數(shù)據(jù)并將其放入一個(gè) WEKA 實(shí)例類還是很簡單的。
讓我們把我們的數(shù)據(jù)通過回歸模型進(jìn)行處理并確保輸出與我們使用 Weka Explorer 計(jì)算得到的輸出相匹配舰始。實(shí)際上使用 WEKA API 讓數(shù)據(jù)通過回歸模型得到處理非常簡單崇棠,遠(yuǎn)簡單于實(shí)際加載數(shù)據(jù)。
// 選擇并初始化模型丸卷,實(shí)際上我們這里需要的是多維線性回歸模型 LinearRegression
LinearRegression linearRegression = new LinearRegression();
// 這個(gè)就是根據(jù)綁定的數(shù)據(jù)生成了模型
linearRegression.buildClassifier(dataset);
// 獲取模型參數(shù)枕稀,為了計(jì)算我們自己的房價(jià)
double[] coef = linearRegression.coefficients();
// 把我們自己的房子屬性代入模型公式
double myHouseValue = (coef[0]?3198) +
(coef[1]?
9669) +
(coef[2]?5) +
(coef[3]?
3) +
(coef[4] * 1) +
coef[6];
//打印出房價(jià),這個(gè)房價(jià)應(yīng)該是和通過直接使用WEKA應(yīng)用程序一致的谜嫉。
System.out.println(myHouseValue);
// outputs 219328.35717359098
結(jié)束語
我們馬上能意識(shí)到萎坷,將以上代碼嵌入我們的后臺(tái)管理系統(tǒng),就是一個(gè)非常專業(yè)和智能化的房價(jià)定價(jià)后臺(tái)骄恶,這個(gè)后臺(tái)加以調(diào)整食铐,可以分城市,地區(qū)甚至分小區(qū)生成更佳的定價(jià)模型僧鲁。另外虐呻,如果綁定最近3個(gè)月的實(shí)時(shí)成交數(shù)據(jù),這個(gè)模型公式還會(huì)根據(jù)最近的成交價(jià)格自動(dòng)調(diào)整參數(shù)寞秃,其價(jià)值遠(yuǎn)遠(yuǎn)大于平均值和人工自定義公式斟叼。
對(duì)于其它三種模型,我們也可以通過學(xué)習(xí)weka.jar API 的用法春寿,自動(dòng)綁定到我們的程序朗涩,這樣就可以形成一個(gè)強(qiáng)大的數(shù)據(jù)挖掘和業(yè)務(wù)支撐系統(tǒng)。
本文是由五個(gè)章節(jié)绑改,分別向大家介紹了幾個(gè)數(shù)據(jù)挖掘的重要概念谢床,包括回歸模型,分類模型和聚類(群集)模型厘线,同時(shí)給大家介紹了 WEKA 軟件的使用方法识腿,并且通過使用WEKA例子,使得大家對(duì)提到的四種數(shù)據(jù)挖掘有了直觀感覺造壮。文章的最后一章渡讼,給大家演示了將weka API weka.jar接入我們系統(tǒng)的基本方法。?
對(duì)大多數(shù)人來說,并不需要深入研究人工智能或者數(shù)據(jù)挖掘的算法成箫,成為這種算法和模型專家展箱,都需要數(shù)年甚至十?dāng)?shù)年的積累,而且你還必須頗具天賦蹬昌。但作為一般的產(chǎn)品人員混驰,程序開發(fā)人員甚至是公司管理決策人員、創(chuàng)業(yè)人員凳厢,花一點(diǎn)時(shí)間账胧,找到合適的工具,去了解人工智能和數(shù)據(jù)挖掘相關(guān)的概念以及如何在日常工作中應(yīng)用它先紫,其實(shí)并不是非常難的事情,而且是非常有價(jià)值的事情筹煮。
希望閱讀這篇文章的每個(gè)人遮精,都能成為這方面的專家!