數據挖掘與機器學習全套教學課件_第1頁
數據挖掘與機器學習全套教學課件_第2頁
數據挖掘與機器學習全套教學課件_第3頁
數據挖掘與機器學習全套教學課件_第4頁
數據挖掘與機器學習全套教學課件_第5頁
已閱讀5頁,還剩569頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

數據挖掘課程介紹課程介紹數據挖掘的歷史:數據分析歷史悠久,我們一直使用數據幫助我們每一次信息的爆炸增長會帶來巨大影響過往的數據如今的數據課程介紹數據挖掘課程:這是一門什么樣的的課程?——介紹數據分析方法在這門課我們需要解決什么樣的問題?我們要學習的工具課程目標數據挖掘課程目標:數據挖掘的基本理論數據挖掘的實現過程常用的數據挖掘的算法基于python的數據挖掘使用數據挖掘方向的比賽企業級的數據挖掘應用案例課程介紹教學計劃:32+32=64,理論+實踐為什么1:1課程地位專業方面:最重要的課程之一,承接著整個大數據專業我們學大數據是為了分析使用課程地位國家政策:《“十三五”國家信息化規劃》兩次提到大數據挖掘分析:大數據挖掘分析等關鍵技術和核心軟硬件上取得突破2017年的《政府工作報告》:一方面要加快培育新材料、人工智能、集成電路、生物制藥、第五代移動通信等新興產業,另一方面要應用大數據、云計算、物聯網等技術加快改造提

升傳統產業,把發展智能制造作為主攻方向。數據挖掘技術背景行業發展:各大公司的基于機器學習的發展:谷歌,百度,阿里,騰訊,科大訊飛數據挖掘的課程要求先導知識:有一定的統計學基礎有一定編程基礎有一定的自學能力數據挖掘的課程要求考核考勤和教材:平時成績+期末上機數據挖掘概念與技術數據挖掘導論課程總體提綱和學時安排章次各章標題名稱講授學時第一章數據挖掘概述3第二章pandas3第三章機器學習3第四章分類算法3第五章回歸算法4第六章聚類算法3第七章集成學習3第八章推薦算法3第九章圖像數據分析4第十章文本數據分析3第一章數據挖掘概論01數據時代02數據挖掘概念目錄03數據挖掘的案例04數據挖掘的應用05習題1.1數據時代ONE

SECOND會有60張照片上傳到網絡ONE

MINUTE會有60小時視頻上傳到視頻網站youtubeONE

DAY在facebook有40億的信息擴散每個智能手機用戶平均會安裝65個應用有2940億封郵件發出,相當于美國兩年的紙質信件數量發出的社區帖子達200萬個,相當于《時代》雜志770年的文字量互聯網產生的全部內容可以刻滿1.68億張DVD1.1數據時代馬云在2017年中國國際大數據產業博覽會的“機器智能”高峰對話會上演講在大數據時代,未來30年將重新定義“變革”。在大數據時代,人類獲得數據能力遠遠超過大家想象,我們對世界的認識要提升到新的高度。1.1數據時代馬云在2017年中國國際大數據產業博覽會的“機器智能”高峰對話會上演講你們知道購買最大的內衣罩杯的消費者是在哪幾個省?我這兒都有。最小的是哪個省?1.1數據時代數據挖掘發展的動力——需要數據爆炸問題--數據采集工具和成熟的數據庫技術使得大量的數據被收集,存儲在數據庫數據倉庫或其他信息庫中以待分析。我們擁有豐富的數據,但是缺乏有用的信息1.1數據時代數據挖掘的提出數大批成熟的業務信息系統投入運行信息系統多年運行,積累了海量的數據1.1數據時代數據挖掘的提出1.2數據挖掘概念什么是數據挖掘數據挖掘是從數據中,發現其有用的信息,從而幫助我們做出決策(廣義角度)1.2數據挖掘概念什么是數據挖掘數據挖掘是從大量的、不完全的、有噪聲的、模糊的、隨機的實際應用數據中,提取隱含在其中的、人們事先不知道的、但又是潛在有用的信息和知識,尋找其規律的技術,結合統計學、機器學習和人工智能技術的綜合的過程(技術角度)1.2數據挖掘概念數據挖掘技術統計學機器學習統計學是關于認識客觀現象總體數量特征和數量關系的科學。它是通過搜集、整理、分析統計資料,認識客觀現象數量規律性的方法論科學。1.2數據挖掘概念機器學習人工智能棋手alphago先后戰勝了兩位頂尖圍棋高手九段李世乭以總比分1:4落敗和九段棋手柯潔0:3落敗AlphaGo

FanAlphaGo

LeeAlphaGo

MasterAlphaGo

Zero1.2數據挖掘概念數據挖掘要做什么數據挖掘的兩大基本目標是預測和描述數據其中預測的計算機建模及實現過程通常被稱為:監督學習(supervised

learning):從標記的訓練數據來推斷一個功能的機器學習任務。1.2數據挖掘概念數據挖掘要做什么數據挖掘的兩大基本目標是預測和描述數據描述的則通常被稱為:無監督學習(unsupervised

learning):根據類別未知

(沒有被標記)的訓練樣本解決模式識別中的各種問題。往更細分,數據挖掘的目標可以劃分為以下這些:1.2數據挖掘概念數據挖掘要做什么數據挖掘的兩大基本目標是預測和描述數據1.2數據挖掘概念預測與描述監督學習主要包括:分類-將樣本劃分到幾個預定義類之一回歸-將樣本映射到一個真實值預測變量上無監督學習主要包括:聚類-將樣本劃分為不同類(無預定義類)關聯規則發現-發現數據集中不同特征的相關性。1.3數據挖掘的案例例子垃圾電子郵件的分類思考:人是如何進行分類的呢?1.3數據挖掘的案例例子股價走勢預測思考:你是如何進行價格預測的呢?1.3數據挖掘的案例例子客戶群體的劃分,大數據殺熟思考:你是如何進行區別對待的呢?1.3數據挖掘的案例例子推薦商品,JD思考:你有過銷售經驗嗎?1.4數據挖掘應用數據挖掘的價值沃爾瑪基于每個月億萬的網絡購物數據,并結合社交網絡上有關產品的評分,開發機器學習語義搜索引擎北極星,方便瀏覽,在線購物者因此增加10%-15%,增加銷售十多億美元1.4數據挖掘應用數據挖掘的價值農夫山泉用大數據賣礦泉水在強大的數據分析能力做支持后,農夫山泉近年以30%-40%的年增長率,在飲用水方面快速超越了原先的三甲:娃哈哈、樂百氏和可口可樂。1.4數據挖掘應用數據挖掘的價值百合網的大數據百合網提出的心靈匹配算法(可以看到兩個人心靈的契合程度)1.4數據挖掘應用數據挖掘的其他應用領域金融領域醫療領域交通領域地理信息領域1.5習題討論下列每項活動是否是數據挖據任務。a)根據性別劃分公司的顧客。b)根據可贏利性劃分公司的顧客。

c)計算公司的總銷售額。d)按學生的標識號對學生數據庫排序。

e)預測擲一對骰子的結果。f)使用歷史記錄預測某公司未來的股票價格。

g)監視病人心率的異常變化。h)監視地震活動的地震波。

i)提取聲波的頻率1.5習題a否。這是一個簡單的數據查詢。b否。這是一種會計計算、應用程序的門限值,然而預測盈利的新客戶將是一種數據挖掘。c否。一個簡單的數據查詢。d否。一個簡單的數據查詢。e否。既然是公正的,這是一種概率的計算。F是。我們可以通過建立模型預測未來的持續價值的股票價格。G是。我們將構建一種類型為正常的心率和當異常心率的行為發生時報警。這將涉及數據挖掘的領域被稱為異常檢測。這也可以看作是一種分類的問題,比如我們例子中正常和不正常兩種心率的行為。H是。在這種情況下,我們將構建模型的不同類型的地震活動。這一例子說明,在區域的數據挖掘已知分級。I否。這是信號處理。第二章Pandas目

錄Pandas快速入門Pandas案例分析01022.1Pandas快速入門統計學統計學是關于認識客觀現象總體數量特征和數量關系的科學統計學的一個案例:子彈中的統計學2.1Pandas快速入門大數據與統計學回想剛才例子,統計需基于大量的數據進行驗證同樣的,數據也可以基于統計進行分析2.1Pandas快速入門統計學在數據挖掘中的應用文本統計與文學作品鑒真文本統計設計到的指標詞頻率、平均句長、平均詞長2.1Pandas快速入門統計學常用指標平均數百分比頻率倍數2.1Pandas快速入門統計分析常用模塊Pandas簡介官網鏈接:/簡介:Pandas是python的一個數據分析包,最初由AQRCapital

Management于2008年4月開發,并于2009年底開源出來,目前由專注于Python數據包開發的PyData開發

team繼續開發和維護,屬于PyData項目的一部分。Pandas最初被作為金融數據分析工具而開發出來,因此,pandas為時間序列分析提供了很好的支持。2.1Pandas快速入門強大的Pandas基本功能開發pandas時提出的需求具備按軸自動或顯式數據對齊功能的數據結構集成時間序列功能既能處理時間序列數據也能處理非時間序列數據的數據結構2.1Pandas快速入門強大的Pandas基本功能數學運算和約簡(比如對某個軸求和)可以根據不同的元數據(軸編號)執行靈活處理缺失數據合并及其他出現在常見數據庫(例如基于SQL的)中的關系型運算2.1Pandas快速入門強大的Pandas數據結構Series(一維)DataFrame(二維)Panel(三維)2.1Pandas快速入門數據結構SeriesSeries是一種類似于一維數組的對象,它由一組數據(各種NumPy數據類型)以及一組與之相關的數據標簽(即索引)組成Series的字符串表現形式為:索引在左邊,值在右邊2.1Pandas快速入門三方面來了解Series創建讀寫運算2.1Pandas快速入門數據結構Series的創建>>>ser1

=

Series(range(4))>>>ser2

=

Series(range(4),index

=

["a","b","c","d"])>>>sdata

=

{"Ohio":

35000,

"Texas":

71000,

"Oregon":16000,

"Utah":

5000}>>>ser3

=

Series(sdata)

注:傳遞的data是一個dict字典類型對象,并且傳遞了index參數,那么對應的值將從字典中取出。否則,index的值將由字典對象里的key值進行構造2.1Pandas快速入門Series的index和values>>>ser2.index>>>ser2.values>>>ser2[["a","c"]]2.1Pandas快速入門數據結構Series的讀寫下標訪問和切片>>>a

=

pd.Series([11,

22,

33,

44,

55])>>>a[1:3]>>>a[1]=22.1Pandas快速入門數據結構Series的運算

Series間的計算>>>a

=

pd.Series([1,

2,

3,

4])>>>b

=

pd.Series([1,

2,

1,

2])>>>print(a

+

b)>>>print(a

*

2)>>>print(a

>=

3)>>>print(a[a

>=

3])2.1Pandas快速入門數據結構Series的運算

Series函數的使用>>>a

=

pd.Series([1,

2,

3,

4,

5])平均值>>>print(a.mean())練習:了解一下Series還有哪些函數吧2.1Pandas快速入門數據結構DataFrameDataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型(數值、字符串、布爾值等)DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典(共用同一個索引)2.1Pandas快速入門幾方面來了解DataFrame創建索引apply方法算術運算缺失值處理2.1Pandas快速入門數據結構DataFrame的創建二維的ndarray>>>import

pandas

as

pd>>>df1=pd.DataFrame(np.arange(9).reshape(3,3),columns=list("bcd"),index=["b","s","g"])2.1Pandas快速入門數據結構DataFrame的創建外部導入>>>import

pandas

as

pd>>>df

=

pd.read_csv("./data/titanic.csv")2.1Pandas快速入門數據結構DataFrame的創建字典導入>>>import

pandas

as

pd>>>data

=

{"country":["aaa","bbb","ccc"],"population":[10,12,14]}>>>df_data

=

pd.DataFrame(data)2.1Pandas快速入門數據結構DataFrame的創建使用Series導入>>>d

=

{"one"

:

pd.Series([1.,

2.,

3.],

index=["a",

"b",

"c"]),"two":

pd.Series([1.,

2.,

3.,

4.],

index=["a",

"b",

"c",

"d"])}>>>df

=

pd.DataFrame(d)>>>pd.DataFrame(d,

index=["d",

"b",

"a"])2.1Pandas快速入門數據結構DataFrame的創建2.1Pandas快速入門數據結構DataFrame的查看>>>df.head(6)>>>()>>>df.index>>>df.columns>>>df.dtypes>>>df.values2.1Pandas快速入門數據結構的索引對象pandas的索引對象負責管理軸標簽和其他元數據(比如軸名稱等)。構建Series或DataFrame時,所用到的任何數組或其他序列的標簽都可以被轉換成一個Index。指定索引>>>df

=

df.set_index("Name")2.1Pandas快速入門數據結構的索引對象pandas中主要的index對象2.1Pandas快速入門數據結構的索引對象Index的方法和屬性I2.1Pandas快速入門數據結構的索引對象Index的方法和屬性II2.1Pandas快速入門索引操作loc用label來去定位,iloc用position來去定位>>>df.iloc[0:5,1:3]>>>df

=

df.set_index("Name")>>>df.loc["Heikkinen,

Miss.

Laina"]>>>df.loc["Heikkinen,

Miss.

Laina":"Allen,

Mr.

William

Henry"]2.1Pandas快速入門重新索引創建一個適應新索引的新對象,該Series的reindex將會根據新索引進行重排。如果某個索引值當前不存在,就引入缺失值2.1Pandas快速入門重新索引reindex函數的參數2.1Pandas快速入門重新索引

reindex操作>>>s1

=

pd.Series(["a","b","c","d","e"],index=[2,1,3,5,4])>>>s2

=

s1.reindex([1,2,3,4,5,6],fill_value=0)>>>s3

=

s2.reindex(range(10),method="bfill")2.1Pandas快速入門groupby操作>>>df

=

pd.DataFrame({"key":["A","B","C","A","B","C","A","B","C"],"data":[0,5,10,5,10,15,10,15,20]})>>>df.groupby("key").sum()>>>df

=

pd.read_csv("./data/titanic.csv")>>>df.groupby("Sex")["Age"].mean()2.1Pandas快速入門函數應用和映射DataFrame的apply方法(index)對象的applymap方法(因為Series有一個應用于元素級的

map方法)2.1Pandas快速入門DataFrame的apply方法>>>def

plus(df,n):>>>

df["c"]

=

(df["a"]+df["b"])>>>

df["d"]

=

(df["a"]+df["b"])

*

n>>>

return

df>>>list1

=

[[1,3],[7,8],[4,5]]>>>df1

=

pd.DataFrame(list1,columns=["a","b"])>>>df1

=

df1.apply(plus,axis=1,args=(2,))>>>print(df1)2.1Pandas快速入門DataFrame的applymap方法對象的applymap方法(因為Series有一個應用于元素級的map方法)apply對一個列進行整體運算applymap對一個DataFrame中的每個元素進行轉換map對一個Series中的每個元素進行轉換2.1Pandas快速入門排序和排名對行或列索引進行排序對于DataFrame,根據任意一個軸上的索引進行排序可以指定升序降序按值排序對于DataFrame,可以指定按值排序的列rank函數2.1Pandas快速入門排序和排名>>>df

=

pd.DataFrame([1,

2,

3,

4,

5],

index=[10,

52,

24,158,

112],

columns=["S"])>>>df.sort_index(inplace=True)對于DataFrame,可以指定按值排序的列>>>frame

=

pd.DataFrame({"b":[4,

7,

-3,

2],

"a":[0,

1,

0,

1]})>>>frame.sort_values(by="b")2.1Pandas快速入門算術運算對不同的索引對象進行算術運算對齊操作會同時發生在行和列上,把2個對象相加會得到一個新的對象,其索引為原來2個對象的索引的并集:>>>df1

=pd.DataFrame(np.arange(9).reshape(3,3),columns=list("bcd"),index=["b","s","g"])2.1Pandas快速入門算術運算>>>df2

=pd.DataFrame(np.arange(12).reshape(4,3),columns=list("cde"),index=["b","s","g","t"])>>>df1+df2>>>df3

=

df1.add(df2,fill_value="0")2.1Pandas快速入門匯總和計算描述統計常用描述和匯總統計函數2.1Pandas快速入門匯總和計算描述統計唯一值以及成員資格2.1Pandas快速入門缺失數據處理NaN(Not

a

Number)表示浮點數和非浮點數組中的缺失數據None也被當作NAN處理2.1Pandas快速入門處理缺失數據濾除缺失數據方法dropna()drop()how參數控制行為,axis參數選擇軸,thresh參數控制留下的數量2.1Pandas快速入門處理缺失數據濾除缺失數據>>>ser

=

pd.Series([4.5,7.2,-5.3,3.6],

index=["d","b","a","c"])>>>ser.drop("c")>>>from

numpy

import

NaN>>>se1=pd.Series([4,NaN,8,NaN,5])>>>se1.dropna()>>>se1[se1.notnull()]2.1Pandas快速入門處理缺失數據濾除缺失數據>>>df

=

DataFrame(np.arange(9).reshape(3,3),

index=["a","c","d"],columns=["oh","te","ca"])>>>df.drop("a")>>>df.drop(["oh","te"],axis=1)>>>df1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])>>>df1.dropna()>>>df1.dropna(how="all")2.1Pandas快速入門處理缺失數據填充缺失數據fillnainplace參數控制返回新對象還是就地修改2.1Pandas快速入門處理缺失數據填充缺失數據>>>from

numpy

import

nan

as

NaN>>>df1=pd.DataFrame([[1,2,3],[NaN,NaN,2],[NaN,NaN,NaN],[8,8,NaN]])>>>df1.fillna(100)>>>df1.fillna({0:10,1:20,2:30})傳入inplace=True直接修改原對象>>>df1.fillna(0,inplace=True)2.1Pandas快速入門處理缺失數據填充缺失數據>>>df2=pd.DataFrame(np.random.randint(0,10,(5,5)))>>>df2.iloc[1:4,3]=NaN>>>df2.iloc[2:4,4]=NaN>>>df2.fillna(method="ffill")#用前面的值來填充>>>df2.fillna(method="bfill",limit=2)#傳入limit=”“限制填充個數:>>>df2.fillna(method="ffill",limit=1,axis=1)#傳入axis=”“修改填充方向:2.2Pandas案例分析自行車數據分析假設我們現在有些自行車行駛數據,看看我們能Pandas分析出一些什么吧。2.2Pandas案例分析自行車數據分析

#導入Pandas>>>import

pandas

as

pd#準備畫圖環境>>>import

matplotlib.pyplot

as

plt>>>pd.set_option("display.mpl_style",

"default")>>>plt.rcParams["figure.figsize"]

=

(15,

5)2.2Pandas案例分析自行車數據分析使用read_csv函數讀取csv文件讀取一組自行車騎行數據,得到一個DataFrame對象2.2Pandas案例分析自行車數據分析#使用latin1編碼讀入,默認的utf-8編碼不適合>>>broken_df=pd.read_csv("bikes.csv",encoding="latin1")#查看表格的前三行>>>broken_df[:3]#查看原始文件的前五行

head-n

5

bikes.csv2.2Pandas案例分析行車數據分析修復讀入問題使用;作為分隔符解析Date列(首列)的日期文本設置日期文本格式,使用日期列作為索引2.2Pandas案例分析行車數據分析>>>fixed_df

=

pd.read_csv("bikes.csv",

encoding="latin1",sep=";",

parse_dates=["Date"],dayfirst=True,

index_col="Date")2.2Pandas案例分析行車數據分析每列對應一條自行車道,每行對應一天的數據從DataFrame中選擇一列讀取csv文件所得結果是一個DataFrame對象DataFrame對象以表格方式存儲數據使用類似于字典(dict)訪問的語法,選擇其中的一列>>>fixed_df["Berri

1"]2.2Pandas案例分析行車數據分析將所選擇的列繪成圖,可以直觀地看出騎行人數的變化趨勢。>>>fixed_df["Berri

1"].plot()2.2Pandas案例分析行車數據分析繪制所有的列(自行車道),可以看到,每條車道的變化趨勢都是類似的。>>>fixed_df.plot(figsize=(15,

10))2.2Pandas案例分析行車數據分析我很好奇我們是一個更通勤的城市還是騎自行車去娛樂城——人們是在周末還是在平日騎自行車?2.2Pandas案例分析行車數據分析在我們的數據結構dataframe中添加一個“工作日”列,下一步,我們查看貝里自行車路徑數據。貝里是蒙特利爾的一條街道,一條非常重要的自行車道。因此,我們將創建一個數據框只考慮ka貝里BiKePath。>>>berri_bikes

=

fixed_df[["Berri

1"]].copy()>>>berri_bikes[:5]2.2Pandas案例分析行車數據分析接下來,我們需要添加一個“工作日”列。首先,我們可以從索引中獲得工作日。我們還沒有談到索引,但是索引是在上面的數據框的左邊,在“日期”下。基本上是一年中的所有日子。>>>berri_bikes.index2.2Pandas案例分析行車數據分析我們可以看到實際上數據是不完整的,通過length數據可以發現,一年只有310天。為什么呢?Pandas時間序列功能非常的強大,所以如果我們想得到所有數據的月日,我們可以輸入以下語句。>>>berri_bikes.index.day2.2Pandas案例分析行車數據分析為普通日進行索引設置:>>>berri_bikes.index.weekday2.2Pandas案例分析行車數據分析通過上面的語句,這我們獲得了一周中的單位日,我們通過與日歷進行對比會發現數據中的0代表的是星期一。我們現在已經知道如何設置普通日進行索引了,我們接下來需要做的是把普通日的索引設置為dataframe中的一列:>>>berri_bikes.loc[:,"weekday"]

=

berri_bikes.index.weekday>>>berri_bikes[:5]2.2Pandas案例分析行車數據分析接下來我們就可以把普通日作為一個統計日進行騎行人數的統計了,而這在Pandas中實現也非常簡單,Dataframes中存在一個

groupby()方法,而實現的語句是,weekday_counts=

berri_bikes.groupby("weekday").aggregate(sum),語句的目的是把Berri車道數據按照相同普通日的標準進行分組并累加。2.2Pandas案例分析行車數據分析>>>weekday_counts

=berri_bikes.groupby("weekday").aggregate(sum)>>>weekday_counts2.2Pandas案例分析行車數據分析這時候我們會發現通過0,1,2,3,4,5,6這樣的數字很難記住其相對應的日子,我們可以通過以下方法修改:>>>weekday_counts.index

=

["Monday",

"Tuesday","Wednesday",

"Thursday",

"Friday",

"Saturday",

"Sunday"]>>>weekday_counts2.2Pandas案例分析行車數據分析通過直方圖看看統計情況:>>>weekday_counts.plot(kind="bar")通過結果我們發現Montrealers似乎是一個喜歡使用自行車作為通勤工具的城市--人們在工作日也大量的使用自行車。第三章數據挖掘與機器學習目

錄機器學習概述機器學習的框架模型的評判過擬合問題01020304數據挖掘與機器學習機器學習機器學習無處不在百度搜索微信朋友圈,微博的相片分類功能數據挖掘與機器學習機器學習數據挖掘與機器學習通過例子來體會一下機器學習數據挖掘與機器學習通過例子來體會一下機器學習數據從何而來數據挖掘與機器學習通過例子來體會一下機器學習實現補全數據挖掘與機器學習什么是機器學習機器學習的英文名稱叫Machine

Learning,簡稱ML,該領域主要研究的是如何使計算機能夠模擬人類的學習行為從而獲得新的知識。簡單來說,機器學習就是讓計算機從大量的數據中學習到相關的規律和邏輯,然后利用學習來的規律來預測以后的未知事物數據挖掘與機器學習機器學習如何學習?思考人類學習過程我們是否能將人類學習過程應用于機器呢?實際上我們已經這么做了數據挖掘與機器學習人類學習的步驟選擇知識選擇學習方法學習或記憶運用評測學習效果知識保存腦海中數據挖掘與機器學習學習的步驟數據的加載(第一步)選擇模型(第二步)模型的訓練(第三步)模型的預測(第四步)模型的評測(第五步)模型的保存(第六步)數據挖掘與機器學習傳統的程序模型與機器學習模型思考傳統的程序模型的不足傳統計算機程序模型:數據挖掘與機器學習傳統的程序模型與機器學習模型機器學習模型:數據挖掘與機器學習機器學習庫sklearnsklearn是機器學習中一個常用的python第三方模塊,網址:http://scikit-/stable/index.html里面對一些常用的機器學習方法進行了封裝,不需要都實現所有的算法,只需要簡單的調用sklearn里的模塊就可以實現機器學習任務。行業占有率大,spark等采用相同框架數據挖掘與機器學習sklearn庫的框架train_x,

train_y,

test_x,

test_y

=

getData()model1

=

somemodel()model.fit(train_x,train_y)predictions

=

model.predict(test_x)score

=score_function(test_y,

predictions)joblib.dump(knn,

"filename.pkl")數據挖掘與機器學習第一步使用sklearn導入數據模塊自帶數據集,參考

/cn/0.19.0/datasets/in

dex.html#datasets了解sklearn自帶的數據集有那些,數據集有哪些屬性數據挖掘與機器學習第一步使用sklearn導入數據#導入數據集模塊>>>from

sklearn

import

datasets#分別加載iris和digits數據集>>>

iris

=

datasets.load_iris()>>>

digits

=

datasets.load_digits()數據挖掘與機器學習第一步使用sklearn導入數據#使用.data()和.target()方法熟悉導入的數據結構>>>

print(iris.data)>>>

print(iris.target)數據挖掘與機器學習使用sklearn分割數據機器學習是從數據的屬性中學習經驗,并將它們應用到新數據的過程。這就是為什么機器學習中評估算法的普遍實踐是把數據分割成訓練集(我們從中學習數據的屬性)和測試集(我們測試這些性質)數據挖掘與機器學習使用sklearn分割數據測試的數據從何而來:數據挖掘與機器學習使用sklearn分割數據>>>

from

sklearn.model_selection

importtrain_test_split>>>X_train,X_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.4,random_state=0)數據挖掘與機器學習第二步使用sklearn模型的選擇學會加載模型,對于不同類型的數據選擇不同的方法(既模型)進行學習,關于各種不同的機器學習模型區別,我們會在下一章節討論數據挖掘與機器學習第二步使用sklearn模型的選擇>>>from

sklearn

import

svm>>>svc

=

svm.SVC()數據挖掘與機器學習第三步使用sklearn模型的訓練訓練:我們使用scikit-learn模塊實現機器學習訓練,此處我們利用了訓練數據集訓練了“transformer”模型,向fit()方法提供輸入訓練數據集后即可訓練模型數據挖掘與機器學習第三步使用sklearn模型的訓練>>>svc.fit(X_train,

y_train)數據挖掘與機器學習第四步使用sklearn進行模型的預測預測:預測既使用模型來預測未知的數據,上一步中我們的模型訓練完成,我們就可以使用我們的模型進行預測了,快看看效果如何吧數據挖掘與機器學習第四步使用sklearn進行模型預測>>>print(svc.predict([[5.84,4.4,6.9,2.5]]))數據挖掘與機器學習第五步機器學習評測的指標通常從算法類型選擇指標:分類指標回歸指標聚類指標數據挖掘與機器學習第五步機器學習評測的指標分類常用的指標:準確率(accuracy):對于給定的測試數據集,分類器正確分類的樣本數與總樣本數之比AUC數據挖掘與機器學習第五步機器學習評測的指標回歸常用的指標:均方誤差(mean_squared_error):是反映估計量與被估計量之間差異程度的一種度量方均根差RMSE(Root

Mean

Square

Error)數據挖掘與機器學習第五步機器學習評測的指標機器學習庫sklearn中,我們使用metrics方法實現:>>>

import

numpy

as

np>>>

from

sklearn.metrics

import

accuracy_score>>>

y_pred

=

[0,

2,

1,

3]>>>

y_true

=

[0,

1,

2,

3]>>>

accuracy_score(y_true,

y_pred)數據挖掘與機器學習第五步機器學習評測方法:交叉驗證(Cross

validation)為什么要使用交叉驗證?將原始數據分成K個子集(一般是均分),將每個子集數據分別做一次測試集(testing

test),其余的K-1組子集數據作為訓練集(trainning

test),這樣會得到K個模型,用這K個模型最終的驗證集的分類指標的平均數作為此K-CV下分類器的性能指標數據挖掘與機器學習第五步機器學習評測方法:交叉驗證(Cross

validation)K一般大于等于2,實際操作時一般從3開始取。交叉驗證重復k次,每次選擇一個子集作為測試集,并將k次的平均交叉驗證識別正確率作為結果。優點:所有的樣本都被作為了訓練集和測試集,每個樣本都被驗證一次。10-folder通常被使用。數據挖掘與機器學習第五步機器學習評測方法:交叉驗證(Cross

validation)數據挖掘與機器學習第五步機器學習評測方法:交叉驗證(Cross

validation)機器學習庫sklearn中,我們使用cross_val_score方法實現:>>>from

sklearn.model_selection

importcross_val_score>>>scores

=

cross_val_score(knn,

iris.data,iris.target,

cv=5)了解scoring參數及

/cn/0.19.0/modules/mo

del_evaluation.html#scoring-parameter數據挖掘與機器學習第六步機器學習:模型的保存這時候我們訓練完成一個完美的模型,我們是那么喜歡這個模型,讓我們保存它,以后他就可以長時間存在啦數據挖掘與機器學習第六步機器學習:模型的保存機器學習庫sklearn中,我們使用joblib方法實現:>>>from

sklearn.externals

import

joblib>>>joblib.dump(knn,

"filename.pkl")>>>knn1=joblib.load("filename.pkl")#測試讀取后的Model>>>print(knn1.score(X_test,

y_test))數據挖掘與機器學習復習:機器學習框架數據挖掘與機器學習機器學習存在的問題過擬合過擬合是指為了得到一致假設而使假設變得過度嚴格。避免過擬合是機器學習設計中的一個核心任務。數據挖掘與機器學習擬合問題的原因1.使用的模型比較復雜,學習能力過強2.有噪聲存在3.數據量有限過擬合:做的太過好以至于偏離了原本,泛化能力差欠擬合:泛化能力強,但過于泛化數據挖掘與機器學習擬合問題的解決尋找參數的最優:超參數優化器使用sklearn中的學習曲線數據挖掘與機器學習擬合問題的解決尋找參數的最優:超參數優化器數據挖掘與機器學習擬合問題的解決>>>train_loss,test_loss=validation_curve(SVC(),X,y,param_name="gamma",param_range=param_range,cv=10,

scoring="mean_squared_error")>>>train_loss_mean=-np.mean(train_loss,axis=1)>>>test_loss_mean=-np.mean(test_loss,axis=1)數據挖掘與機器學習擬合問題的解決第四章分類算法目

錄分類算法概述概率模型樸素貝葉斯算法向量空間模型01020304目

錄K鄰近分類器0506多問題的分類分類算法的概述0

1引言機器學習算法的最普通類型是什么監督學習算法-就是我們教計算機如何做事情無監督學習算法-在非監督學習中,我們將讓計算機自己學習引言監督學習可分為分類回歸引言監督學習可分為兩類什么樣的數據適合分類算法?考慮案例中的數據類型查看sklearn中數據集的數據結構回顧第3章介紹的鳶尾花卉數據集呢?“教”是什么意思?一個關于分類學習的例子我們來看一個問題當我們獲得一些關于腫瘤的醫療數據,我們怎么讓機器判斷腫瘤是良性的還是惡性的呢?引言引言引言例子實現了什么?指我們給算法一個數據集,并且給定正確答案在分類學習中,數據集中的每個數據,算法都知道數據的“正確答案”算法將算出更多新的結果如瘤是惡性的還是良性的引言引言分類方法的定義分類分析的是根據已知類別的訓練集數據,建立分類模型,并利用該分類模型預測未知類別數據對象所屬的類別。引言分類方法的應用模式識別(Pattern

Recognition),就是通過計算機用數學技術方法來研究模式的自動處理和判讀。模式識別的目標往往是識別,即分析出待測試的樣本所屬的模式類別引言分類方法的應用預測,從利用歷史數據記錄中自動推導出對給定數據的推廣描述,從而能對未來數據進行類預測現實應用案例用行為分析物品識別、圖像檢測電子郵件的分類(垃圾郵件和非垃圾郵件等)新聞稿件的分類、手寫數字識別、個性化營銷中的客戶群分類、圖像/視頻的場景分類等引言引言分類器分類的實現方法是創建一個分類器(分類函數或模型),該分類器能把待分類的數據映射到給定的類別中。創建分類的過程與機器學習的一般過程一致引言分類器的構建回顧構建一個機器學習框架的基本步驟:(1)數據的加載。(2)選擇模型。(3)模型的訓練。(4)模型的預測。(5)模型的評測。(6)模型的保存。引言訓練數據集分類算法IF

rank

=

‘professor’OR

years

>

6THEN

tenured

=

‘yes’分類規則分類器的構建圖示引言分類規則測試集未知數據(Jeff,

Professor,

4)Tenured?分類器的構建圖示引言分類器的構建標準使用下列標準比較分類和預測方法預測的準確率:模型正確預測新數據的類編號的能力速度:產生和使用模型的計算花銷健壯性:給定噪聲數據或有空缺值的數據,模型正確預測的能力可伸縮性:對大量數據,有效的構建模型的能力可解釋性:學習模型提供的理解和洞察的層次biao概率模型貝葉斯簡介貝葉斯(約1701-1761),英國數學家貝葉斯方法源于他生前解決逆概的一篇文章概率模型貝葉斯要解決的問題使正向概率:假設袋子里有N個白球,M個黑球,隨機摸一個,摸出黑球的概率有多大逆向概率:如果事先不知道袋子里黑白球的比例,隨機摸出幾個球,根據這些球的顏色,可以推測袋子里面的黑白球比例概率模型一個例子概率模型一個例子男生總是穿長褲,女生則一半穿長褲一半穿裙子正向概率:隨機選取一個學生,穿長褲的概率和穿裙子的概率是多大逆向概率:迎面走來一個穿長褲的學生,無法確定該學生的性別,請問該學生是女生的概率有多大概率模型一個例子假設學校里面人的總數是U穿長褲的男生:U*P(Boy)*P(Pants|Boy) P(Boy)是男生的概率=60%P(Pants|Boy)是條件概率,即在Boy的條件下,穿長褲的概率是多大,這里是100%穿長褲的女生:U*P(Girl)*P(Pants|Girl)概率模型一個例子求解:穿長褲的總數:U*P(Boy)*P(Pants|Boy)+U*P(Girl)*P(Pants|Girl)穿長褲的人為女生的概率:

P(Girl|Pants)=U*P(Girl)*P(Pants|Girl)/穿長褲的總數=U*P(Girl)*P(Pants|Girl)/[U*P(Boy)*P(Pants|Boy)+U*P(Girl)*P(Pants|Girl)]概率模型一個例子與總人數有關嗎?分子分母均包含總人數,結果與總人數無關,可以消去P(Girl|Pants)=P(Girl)*P(Pants|Girl)/[P(Boy)*P(Pants|Boy)+P(Girl)*P(Pants|Girl)]分母就是P(Pants)概率模型貝葉斯公式樸素貝葉斯樸素貝葉斯分類器我們介紹的第一個分類學習方法是樸素貝葉斯(

NaiveBayes)模型,它是一種基于概率的學習方法“樸素”指的是條件的獨立性我們一起通過一個例子來了解一下樸素貝葉斯分類算法樸素貝葉斯樸素貝葉斯案例現在給我們的問題是,如果一對男女朋友,男生想女生求婚,男生的四個特點分別是不帥,性格不好,身高矮,不上進,請你判斷一下女生是嫁還是不嫁?樸素貝葉斯算法樸素貝葉斯案例樸素貝葉斯算法樸素貝葉斯案例這是一個典型的分類問題數學問題就是比較p(嫁|(不帥、性格不好、身高矮、不上進))與p(不嫁|(不帥、性格不好、身高矮、不上進))樸素貝葉斯算法樸素貝葉斯案例聯系到我們的樸素貝葉斯公式:樸素貝葉斯算法樸素貝葉斯案例求p(嫁|(不帥、性格不好、身高矮、不上進),這是我們不知道的,但是通過樸素貝葉斯公式可以轉化為好求的三個量p(不帥、性格不好、身高矮、不上進|嫁)、p(不帥、性格不好、身高矮、不上進)、p(嫁)樸素貝葉斯算法樸素貝葉斯案例其中p(不帥、性格不好、身高矮、不上進|嫁)=p(不帥|嫁)*p(性格不好|嫁)*p(身高矮|嫁)*p(不上進|嫁)那么我就要分別統計后面幾個概率,也就得到了左邊的概率!樸素貝葉斯算法樸素貝葉斯案例我們將上面公式整理一下如下:樸素貝葉斯算法樸素貝葉斯案例下面我將一個一個的進行統計計算(在數據量很大的時候,中心極限定理,頻率是等于概率的)p(嫁)=?首先我們整理訓練數據中,嫁的樣本數如下:則p(嫁)=6/12(總樣本數)=1/2樸素貝葉斯算法則p(嫁)=6/12(總樣本數)=1/2樸素貝葉斯案例樸素貝葉斯算法則p(不帥|嫁)=3/6=1/2在嫁的條件下,看不帥有多少樸素貝葉斯案例p(不帥|嫁)=?統計滿足樣本數如下:樸素貝葉斯算法樸素貝葉斯案例求出其他統計量的概論代入=

(1/2*1/6*1/6*1/6*1/2)/(1/3*1/3*7/12*1/3)樸素貝葉斯算法思考剛才的案例,我們做了哪些事情1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集樸素貝葉斯樸素貝葉斯算法2、統計得到在各類別下各個特征屬性的條件概率估計,即只計算P(a1|y1),P(a2|y1)......的概率而不是聯合概率樸素貝葉斯樸素貝葉斯分類器分類3、假設各個特征屬性是條件獨立的,則根據貝葉斯定理有如下推導:樸素貝葉斯樸素貝葉斯分類器分類分母對于所有類別為常數,我們只要將分子最大化皆可。又因為各特征屬性是條件獨立的,所以有:樸素貝葉斯樸素貝葉斯分類算法1、設x={a1,a2,a3,......am}為一個待分類項,而每個a為x的一個特征屬性。2、有類別集合C={y1,y2,......yn}。3、計算P(y1|x),P(y2|x),......,P(yn|x),。4、如果,P(yk|x)=max{P(y1|x),P(y2|x),......,P(yn|x)},則x屬于yk。樸素貝葉斯概率模型討論P(a|y)的估計樸素貝葉斯分類的關鍵:計算條件概率P(a|y),當特征屬性為離散值時,使用頻率即可用來估計P(a|y)下面重點討論特征屬性是連續值的情況。概率模型討論P(a|y)的估計當特征屬性為連續值時,通常假定其值服從高斯分布(也稱正態分布)。即:而概率模型討論P(a|y)的估計計算出訓練樣本各類別中特征項劃分的各均值和標準差,即可得到需要的估計值P(a|y)均值與標準差的計算在此不再贅述。概率模型討論P(a|y)=0的估計另一個需要討論的問題就是當P(a|y)=0怎么辦?當某個類別下某個特征項劃分沒有出現時,就是產生這種現象,這會令分類器質量大大降低概率模型討論P(a|y)=0的估計為了解決這個問題,我們引入Laplace校準,它的思想非常簡單,就是對沒類別下所有劃分的計數加1,這樣

如果訓練樣本集數量充分大時,并不會對結果產生影響,并且解決了上述頻率為0的尷尬局面概率模型高斯和多項式樸素貝葉斯數據集類型的不同,數據的分布也不同什么樣的數據適合使用高斯?什么樣的數據適合使用多項式貝葉斯?了解多項式分布和高斯分布樸素貝葉斯算法樸素貝葉斯案例加載數據from

sklearn

import

datasetsiris

=

datasets.load_iris()導入模型>>>

from

sklearn.naive_bayes

import

GaussianNB>>>

gnb

=

GaussianNB()樸素貝葉斯算法樸素貝葉斯案例訓練模型+預測數據y_pred

=

gnb.fit(iris.data,

iris.target).predict(iris.data)輸出print("Number

of

mislabeled

points

out

of

a

total

%d

points

:

%d"%

(iris.data.shape[0],(iris.target

!=

y_pred).sum()))向量空間模型向量空間模型空間中具有大小和方向的量叫做空間向量我們可以想象我們我們所分析的數據的每一個屬性視為一個向量維度,我們輸入的數據其實是某個高維向量空間中的一個點向量空間模型向量空間模型很多基于向量空間的分類器在分類決策時用到距離的概念。空間距離計算方法:歐氏距離(Euclidean

distance)向量空間模型向量空間模型在二維和三維空間中的歐式距離的就是兩點之間的距離,二維的公式是d

=

sqrt((x1-x2)^2+(y1-y2)^2)向量空間模型向量空間模型三維的公式是d=sqrt(x1-x2)^2+(y1-y2)^2+(z1-z2)^2)推廣到n維空間向量空間模型向量空間模型進行分類空間向量如何進行分類?在向量空間的分類中,我們必須要做的工作是定義類別之間的邊界,從而得到分類的結果KNN算法KNN分類器算法K近鄰(K

Nearest

Neighbors,KNN)算法,又稱為KNN算法思想是尋找與待分類的樣本在特征空間中距離最近的K個已標記樣本(即K個近鄰),以這些樣本的標記為參考,通過投票等方式,將占比例最高的類別標記賦給待標記樣本KNN算法KNN分類器K面通過一個簡單的例子說明一下:如下圖,綠色圓要被決定賦予哪個類,是紅色三角形還是藍色四方形?KNN算法KNN分類器如果K=3,由于紅色三角形所占比例為2/3,綠色圓將被賦予紅色三角形那類KNN算法KNN分類器如果K=5,藍色四方形比例為3/5,因此綠色圓被賦予藍色四方形類。KNN算法KNN分類器算法KNN算法需要確定K值、距離度量和分類決策規則K值過小時,只有少量的訓練樣本對預測起作用,容易發生過擬合,或者受含噪聲訓練數據的干擾導致錯誤K值過大,過多的訓練樣本對預測起作用,當不同類別樣本數量不均衡時,結果偏向數量占優的樣本KNN算法KNN分類器算法距離度量在KNN中,通過計算對象間距離來作為各個對象之間的相似性指標,距離一般使用歐氏距離或曼哈頓距離:KNN算法KNN分類器算法1)計算測試數據與各個訓練數據之間的距離;2)按照距離的遞增關系進行排序;3)選取距離最小的K個點;4)確定前K個點所在類別的出現頻率;5)返回前K個點中出現頻率最高的類別作為測試數據的預測分類。KNN算法KNN案例加載數據from

sklearn

import

datasetsiris

=

datasets.load_iris()導入模型>>>from

sklearn.neighbors

import

KNeighborsClassifier>>>

knn

=

KNeighborsClassifier()多類問題的分類多類分類和多標簽分類多類分類指一個樣本屬于且只屬于多個類中的一個,一個樣本只能屬于一個類,不同類之間是互斥的多標簽分類(multilabel

classification)又稱,多標簽學習、多標記學習,不同于多類分類,一個樣本可以屬于多個類別(或標簽),不同類之間是有關聯的。多類問題的分類多類分類直接使用能直接處理多類問題的分類器多類問題的分類多標簽分類多標簽分類實現,將多標記學習問題轉化為“標記排序(labelranking)問題求解,既對所有類別排序然后選出排名最高的類多類問題的分類多標簽分類器一種方法是,我們可以使用一個直接的置信度指標來對類別排序,比如,類別歸屬的概率第五章無監督學習目

錄概述聚類中的數據結構基于劃分的聚類方法層次聚類方法01020304目

錄密度聚類方法05機器學習算法無監督學習無監督學習算法-在非監督學習中,我們將讓計算機自己學習對于監督學習,我們回想一下每個樣本都已經被標明,既我們已經被告知了明確的答案與監督學習不一樣的數據類型沒有屬性或標簽這一概念機器學習算法無監督學習的數據機器學習算法無監督學習實現功能無監督學習的典型算法是聚類算法和降維通過案例來了解一下聚類算法機器學習算法無監督學習的聚類機器學習算法聚類的案例引言聚類(clustering)的概念聚類分析,將數據對象分組成為多個簇同一簇中的對象彼此相似不同簇中的對象彼此相異引言聚類算法的功能作為一個獨立的工具來獲得數據分布的情況作為其他算法(如:特征和分類)的預處理步驟引言聚類算法的應用場景市場營銷:幫市場分析人員從客戶基本庫中發現不同的客戶群,從而可以對不同的客戶群采用不同的營銷策略保險業:發現汽車保險中索賠率較高的客戶群城市規劃:根據房子的類型、價值和地理位置對其進行分組地震研究:將觀測到的震中點沿板塊斷裂帶進行聚類,得出地震高危區引言聚類算法的評判標準可擴展性:大多數來自于機器學習和統計學領域的聚類算法在處理數百萬條數據時能表現出高效率處理不同數據類型的能力:數字型、二元類型、圖像型等等發現任意形狀的能力:基于距離的聚類算法往往發現的是球形的聚類,其實現實的聚類是任意形狀的引言聚類算法的評判標準處理噪聲數據的能力:對空缺值、離群點、數據噪聲不敏感對于輸入數據的順序不敏感:同一個數據集合,以不同的次序提交給同一個算法,應該產生相似的結果引言聚類算法的數據問題已經了解了無監督學習的有監督學習的數據類型不同聚類算法的數據是什么樣子的呢?引言聚類算法的數據結構聚類算法采用以下兩種數據結構常見的數據矩陣:行代表不同的數據,列為數據的屬性相異度矩陣:存儲n個對象兩兩之間的相似度聚類數據結構聚類算法的距離計算對象間的相似度是基于兩個對象間的1/距離來計算的歐氏距離Manhattan距離聚類數據結構數據需要注意的問題思考:如果某個特征的方差比其他特征大幾個數量級,那么它就會在學習算法中占據主導位置,這樣是否合理?數據標準化避免度量單位的影響,聚類數據結構數據需要注意的問題>>>from

sklearn

import

preprocessing>>>

import

numpy

as

np>>>

X_train

=

np.array([[

1.,

-1.,

2.],... [

2.,

0.,

0.],... [

0.,

1.,

-1.]])>>>

X_scaled

=

preprocessing.scale(X_train)聚類數據結構二元變量一個二元變量只有兩種狀態:0或1;能否通過距離計算兩個二元變量之間的相似度?可以使用Jaccard系數評估它們的相似度聚類數據結構二元變量i:[0,0,1,0,1]j:[1,0,1,1,0]那么有q=1,r=1,s=2,則Object

iObject

j基于劃分的聚類主要聚類方式基于劃分的方法基于層次的方法基于密度的方法基于劃分的聚類基于劃分的方法劃分方法(Partitioning

method):將數據集中的數據對象分配到n個簇中,并且通過設定目標函數來驅使算法趨向于目標每個組至少包含一個對象每個對象必須屬于且只屬于一個組基于劃分的聚類k-means聚類方式K-Means(K均值)算法是劃分聚類算法中的一種,其中K表示簇的數量,means表示均值。算法通過預先設定的K值及每個簇的初始質心對相似的數據點進行劃分。并通過劃分后的均值迭代優化獲得最優的聚類結果基于劃分的聚類k-means聚類方式K-Means算法的偽代碼如下:1.從D中任意選擇k個對象作為初始簇的質心2.Repeat3.

根據簇質心的值,將每個數據分配到最相似的簇4.

計算簇均值,更新簇質心值5.until簇中心不在發生變化基于劃分的聚類k-means聚類方式關鍵詞:K表示簇的數量,means表示均值,初始質心,劃分,迭代質點系質量分布的平均位置,是最能代表一個簇的點算法的目標是什么?質心為什么需要改變?基于劃分的聚類質心對樣本的代表函數一個衡量質心對簇樣本的代表程度的指標是RSS

(ResidualSum

of

Squares,殘差平方和),即所有數據到其簇質心距離的平方和,公式為:基于劃分的聚類k-means聚類執行過程基于劃分的聚類k-means聚類方式一個動態網站:https:///blog/visualizing-k-

means-clustering/基于劃分的聚類k-means聚類方式算法會得到我們想要的結果嗎?質心會趨于穩定嗎?基于劃分的聚類k-means的結束第一,在每次數據的重分配過程中,每個向量都分配給最近的質心,此時它對RSS計算的距離貢獻值也會減小,因此RSS會單調減少第二,在簇中心重計算過程中,由于新的質量向量使得每個RSS

k達到最小值因此,此時RSS也會單調遞減基于劃分的聚類k-means的結束當迭代一個固定次數后停止當RSS低于某個閾值低于某個閾值時停止當質心不再改變后停止基于劃分的聚類k-means的問題k-means算法是一個比較容易理解的算法但是卻也存在以下問題基于劃分的聚類初始值對k-means聚類影響基于劃分的聚類k-means初始值選擇將全部數據隨機地分為C簇,計算各個簇的質心,將這些質心作為每簇的初始點從(c-1)聚類劃分問題的解中產生C聚類劃分問題的代表點。其具體做法是先從一類聚類的解找兩聚類劃分的代表點,再依次增加一個聚類代表點。對樣本集首先看作一個聚類,計算其總均值,然后找與該均值相距最遠的點基于劃分的聚類k值對k-means聚類影響基于劃分的聚類k-means算法k值選擇依據實際業務來選擇從層次聚類中選擇參考K均值算法K均值算法運行注意問題數據集如果有以下不同的簇類型,kmeans效果會不佳:簇大小相差大簇密度相差大非球型形狀數據如果存在離群點,kmeans會很受影響,因為使用算數平均來選取類中心K均值算法簇大小相差大原始kmeans聚3類K均值算法簇密度相差大原始kmeans聚3類K均值算法非球型形狀原始kmeans聚2類K均值算法sklearn調用演示>>>

from

sklearn.cluster

import

KMeans>>>

import

numpy

as

np>>>

X

=

np.array([[1,

2],

[1,

4],

[1,

0],...

[4,

2],

[4,

4],

[4,

0]])>>>

kmeans

=KMeans(n_clusters=2,random_state=0).fit(X)>>>

kmeans.labels_>>>

kmeans.predict([[0,

0],

[4,

4]])>>>

kmeans.cluster_centers_層次聚類引入層次聚類基于劃分聚類具有概念簡單、速度快的優點,但是同時也有很多缺點:它們需要預先定義簇的數目層次聚類層次聚類層次聚類(hierarchical

clustering)是指對與給定的數據集對象,我們通過層次聚類算法獲得一個具有層次結構的數據集合子集結合的過程層次聚類分為兩種:自底向上的凝聚法以及自頂向下的分裂法層次聚類凝聚層次聚類凝聚法指的是初始時將每個樣本點當做一個簇,所以原始簇的數量等于樣本點的個數,然后依據某種準則合并這些初始的簇,直到達到某種條件或者達到設定的簇的數目某種準則可以是相似度層次聚類分裂層次聚類分裂法指的是初始時將所有的樣本歸為一個簇,然后依據某種準則進行逐漸的分裂,直到達到某種條件或者達到設定的簇的數目層次聚類凝聚層次聚類偽代碼基本算法流程計算各數據間的相似度矩陣每個數據就是一個簇Repeat合并兩個最相似的簇形成新簇更新相似度矩陣Until只剩一個類簇層次聚類層次聚類運行過程層次聚類不需要事先指定簇的數目,設定層次樹高度就可以達到任意選擇簇數量的目的層次聚類層次聚類問題簇之間的相似度如何計算呢,即跟新相似度矩陣?常用的策略層次聚類:如何定義簇之間的距離簇間相似度MIN(單連接)MAX(全連接)Group

Average(組平均)Distance

Between

Centroids(質心距離)Similarity?層次聚類:如何定義簇之間的距離簇間相似度MIN(單連接):單鏈接的計算方法是將兩個簇的數據點中距離最近的兩個數據點間的距離作為這兩個簇的距離層次聚類:如何定義簇之間的距離單鏈接的運算過程MIN(單連接):單鏈接的計算方法是將兩個簇的數據

溫馨提示

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

評論

0/150

提交評論