大家好,我是不溫蔔火,是一名計算機學院大資料專業大二的學生,昵稱來源于成語—<code>不溫不火</code>,本意是<code>希望自己性情溫和</code>。作為一名網際網路行業的小白,部落客寫部落格一方面是為了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新。但由于水準有限,部落格中難免會有一些錯誤出現,有纰漏之處懇請各位大佬不吝賜教!
一、資料分析介紹
1、機器學習發展曆程
2、機器學習的分類
2.1、有監督學習(supervised learning)
2.2、無監督學習(unsupervised learning)
2.3、強化學習(reinforcement learning)
3、機器學習的基本概念和流程
3.1、機器學習的基本概念
1、明确目标
1、什麼是分類
2、什麼是回歸
3、什麼是聚類
3.2、機器學習的基本流程
1、訓練集和測試集
2、訓練模型和測試模型
1、訓練模型
2、測試模型
3、模型性能評估
二、機器學習算法模型與算法
1、線性回歸
1.1、公式及圖解
1.2、線性回歸的特點:
2、邏輯回歸
2.1、邏輯回歸公式
2.2、邏輯回歸的特點
3、K近鄰(KNN)
3.1、K近鄰算法流程
3.2、K近鄰(KNN)的特點
4、決策樹
4.1、決策樹的基本結構
4.2、決策樹的生成
4.3、決策樹的特點
5、K-means聚類
5.1、K-means算法步驟
5.2、K-means算法的優缺點
6、PCA降維
6.1、PCA的基本思想
6.2、步驟
6.3、特點
三、資料分析的工具與介紹
1、資料分析常用工具
2、常用到的Python子產品
3、Sklearn庫
3.1、Sklearn庫簡介
3.2、常用子產品
4、Mahout
5、基于Spark的Mllib子產品
5.1、Spark簡介
5.2、Mllib
四、使用K近鄰構造糖尿病診斷模型(案例)
1、前提準備
2、分析過程
2.1、資料導入
2.2、資料劃分
3、完整代碼
什麼是資料分析?
資料分析就是利用機器學習等算法分析資料、挖掘資料資訊的一個過程。
機器學習是大資料分析的核心方法
機器學習就是讓計算機從大量的資料中學習相關的規律,然後利用學習來的規律對未知資料進行預測的方法。
資料集中的樣本帶有标簽,有明确目标
執行個體:信用風險評估
根據使用者的曆史還款記錄和信用賬戶賬齡等資訊,預測使用者未來是否違約。
資料集中的樣本沒有标簽,沒有明确目标
執行個體:電信使用者聚類
根據使用者的通信行為資料集,将電信使用者劃分為不同的群體
智慧決策的過程,通過過程模拟和觀察來不斷學習、提高決策能力
執行個體:AlphaGo
将實際問題轉換為數學問題
明确需要的資料的形式
明确機器學習的目标分類、回歸還是聚類,還是其他
分類就是根據樣樣本資料的特征或屬性,将其分到某一已有的類别中
eg:在電子郵箱服務中,将郵箱劃分為正常郵件或垃圾郵件,這時比較典型的一個分類問題。
在日常生活中,我們會碰到目标特征為連續型的預測問題,例如收入預測、銷量預測和商品預測等,這種問題稱為回歸問題。
eg:根據鑽石的切割、成色、淨度、卡拉重量和價格等特征,對鑽石的價格進行預測。
聚類就是将資料集中類似的樣本進行分組的過程,每一個稱為一個“簇”
eg:根據全球各地觀測到的氣候特征,将全球劃分為不同的氣候區域
下圖為信貸模型完整流程示意:
信貸模型
目标:根據借貸人的基本資訊如收入、教育程度、婚姻狀态等,預測借貸人未來是否違約
研究的問題“是否違約”稱為目标變量
研究的問題是一個分類問題
特征:
在信貸模型中,我們收集到的資料集中的變量有:性别、收入、教育程度、婚姻狀态等,我們把這些變量稱為特征。
特征不僅僅包括這些可以直接獲得的變量,還包括利用原始資訊構成的新的變量。
特征的資料類型:
在銀行貸款案例中,我們将擷取到的資料集分為兩部分,一部分用來學習分類、訓練模型,稱之為訓練集;另一部分用來預測,即測試訓練好的模型的預測能力,稱之為測試機
一般按照一定的比例随機的将資料集劃分為訓練集和測試機
用訓練集來訓練模型,其中每個訓練樣本由特征和目标變量組成
銀行借貸案例中,每個訓練樣本有四種特征(性别、收入、教育程度、婚姻狀态),一個目标變量(是否違約)
當完成模型訓練後,利用測試集對模型進行測試,檢驗模型的好壞
将測試集輸入訓練好的模型,輸出預測值
通過性能名額,比較預測的目标變量值和實際目标變量值之間的差别,評價模型的好壞
在回歸問題上,通常用均方誤差(MSE)來評價模型的好壞
在分類問題上,常用正确率和錯誤率來評價模型的好壞
混淆矩陣(confusion matrix)可以直覺檢視分類問題中預測分類與真實分類的情況
①正确率(Accuracy):正确分類(預測類别與實際類别相等)
樣本數占樣本總數的比例:
一般情況下,正确率越大,表示模型預測效果越好
② 錯誤率:錯誤分類(預測類别與實際類别不相等)樣本數占樣本總數的比例:
一般來說,錯誤率越小,表示模型越策效果越好
③召回率(recall)和精度(precision):
④ROC曲線基本概念:
⑤AUC值:
不同的模型能達到不同的效果,如果選擇錯模型,就會無用功。
基本思想:
就是尋找一條直線,使得所有樣本盡可能地落在它的附近,即目标變量y和特征x之間的關系近似遵循一條直線
一進制線性回歸模型為:
形式簡單,易于模組化
具有很好的可解釋性
邏輯回歸之是以稱為“回歸”,是因為它采用了回歸分析的思想。然而,它是用來解決分類問題的模型,通常解決的是二分類問題
邏輯回歸是應用最為廣泛的模型之一
①金融領域的風險評估
②網際網路廣澳點選預測
從線性回歸到邏輯回歸
線上性回歸中,預測目标y是連續型,模型如下
假如要解決的是二分類問題,也就是預測目标y為離散型
改變方式—引入Logistic函數
速度快,适合二分類問題
簡單易于了解,可以直接看到各個特征的權重
K近鄰并沒有學習的過程,而是在預測的時候根據資料的狀況直接進行預測
确定K的大小和相似度的計算方法
從訓練樣本中挑選k個與測試樣本最相似的樣本
根據k個訓練樣本的類别,通過投票的方式來确定測試樣本的類别
優點:
簡單實用,易于實作
對異常資料不敏感
缺點:
計算效率不高
生活中有很多場景需要我們通過一系列問題的診斷結果來進行決策。
一個根節點(沒有箭頭指向它):圖中的“收入”就是一個根節點
内部節點(既有箭頭指向它,它又有箭頭指出):圖中的“教育程度”就是一個内部節點
葉子節點(隻有箭頭指向它,它沒有箭頭指出):表示一個類,圖中粉色和綠色方塊就是兩個葉子節點
決策樹模型就是基于特征,自動生成一顆具有分類能力的樹的過程
從根節點開始,進行特征的選擇(如年齡)
然後選擇該節點特征的分裂點,根據分裂點分裂節點(如50)
然後選擇新的特征作為分支節點,繼續分裂,直至達到一定條件停止分裂,形成一顆決策樹
原理簡單、易于了解
具有較強的解釋性
對缺失值也有很好的處理方式
聚類:“物以類聚,人以群分”
K-means聚類原理:
将n個樣本劃分到K個簇中,其中每個樣本歸屬于距離自己最近的簇
聚類效果:使簇内具有較高的相似度,而簇間的相似度較低
1、随機選取K個樣本作為初始中心
2、重複疊代如下步驟直至收斂:
算法實作簡單、直覺
支援多種距離計算
聚類結果依賴于初始于K個中心的選擇
需要指定K值和初始化K個簇
不易處理非簇狀資料,且易受離群值的影響
高緯資料給資料分析帶來的一個嚴重的挑戰是次元災難問題,即模型的複雜度和計算量随着維數的增加而呈指數增長
降維試解決次元災難的一種手段
假如我們現在要借助使用者手機的通信資料對使用者價值進行分析,原始通信資料包括:入網時間、套餐價格、每月話費、每月流量、每月通話時長、欠費金額、欠費月數等7個特征,但它的“内在次元”可能隻有3個:使用者忠誠度、消費能力、欠費指數,這3個次元能夠更加直覺地對使用者價值進行刻畫
即将原始7維資料降為3維
主成分分析(PCA)是一種有效的降維方法
構成原始特征的一系列線性組合形成低維的特征,以去除相關資料的相關性,并使降維後的資料最大程度地保持原始高維資料地資訊
即把多個特征轉換為少數幾個互不相關地總和特征,且盡可能地保留原始資料地資訊,這些互不相關地綜合特征稱為主成分
計算效率高
便于了解低維資料
建構的主成分特征沒有明确的含義
基于Python的Scikit-learn庫
基于Hadoop的Mahout
基于Spark的Mllib子產品
Numpy庫:科學計算基礎庫
Pandas庫:資料處理和分析工具庫
Scipy庫:算法和數學工具庫
Matplotlib:繪制資料圖表的庫
Scikit-learn(簡稱Sklearn)庫:機器學習庫
Sklearn是Python著名的機器學習庫
封裝了衆多機器學習算法,内置了許多公開資料集,且擁有完整的文檔
實作了資料預處理、分類、回歸、降維、特征選擇、特征抽取和模型評價等機器學習功能
Sklearn官網:http://scikit-learn.org/stable/index.html#
分類:Classification
包括邏輯回歸、K近鄰、決策樹等
回歸:Regression
線性回歸
聚類:Clustering
K-means
降維:Dimensionality reduction
主成分分析(PCA)
模型選擇:Model selection
預處理:Preprocessing
Apache Mahout是Apache Software Foundation(AFS)旗下的一個開源項目,提供了一些經典的機器學習的算法
Mahout安裝官網:http://archive.apache.org/dist/mahout/
基于Hadoop的機器學習和資料挖掘的分布式架構,通過MapReduce模式實作
封裝了大量資料挖掘經典算法,包括聚類、分類等
Spark是專用大規模資料處理而設計的快速通用的計算引擎。具有運作速度快。容易使用、通用性強、運作模式多樣的特點
Spark安裝官網:http://spark.apache.org/downloads.html
Spark 分布式資料分析
允許使用者将資料加載至叢集記憶體,并多次對其進行查詢,非常适合用于機器學習算法。
Spark的一個最大特點就是它的分布式計算,即它可以将一個大任務分解成很多小人物,交給很多台機器去分别完成,最後彙總,這就是“人多力量大”的道理。
除了資料處理性能上的優化,Spark還提供了多種特殊環境下的資料分析工具
Mllib是建構在Apache Spark之上,一個專門針對大資料處理通用的、快速的引擎
Mllib是Spark的可以拓展的機器學習庫
由以下部分組成:
通用的學習算法和工具,包括分類、回歸、聚類、協同過濾、降維、以及調優等。
Mllib提供的工具:
機器學習算法:常用的學習算法,如分類、回歸、聚類
特征:特征提取、選擇及降維
存儲:儲存和加載算法、模型
實用工具:線性代數,統計,資料處理等
此案例的目标:
根據曆史資料資訊,建立糖尿病自動診斷模型,預測被診斷者是否患有糖尿病
分類問題
使用K鄰近算法進行分類
糖尿病的背景介紹:
主要特征:高血糖
檢測糖尿病大多需要檢查血糖、體重、胰島素水準等
資料集特征說明:
載入pandas庫,利用read_csv函數讀取資料
資料檢視
導入後的資料表格一共9列
Pandas中describe()函數可檢視資料集中變量的描述性資訊
在資料集劃分之前,将特征和目标變量分離
其中X為特征,Y為目标變量
特征變量中,懷孕次數(Pregnancies)為離散型特征,其它為連續型特征
另一種切分方法:載入sklearn.model_selection,利用train_test_split()函數将資料集按照一定的比例随機劃分為訓練集和測試機
代碼解釋:
将資料集按8:2比例劃分成訓練集(train)和測試集(test)
test_size為測試集比例(0.2表示測試集占總樣本的比例)
參數stratify保持測試集和訓練集中Outcome(目标變量)類别比例不變
用訓練集訓練模型
從sklearn.neighbors中載入k近鄰算法KNeighborsClassifier
利用測試集測試模型:
其中"1"表示"是",“0"表示"否”
模型性能評估
sklearn中有可直接得出正确率的函數:accuracy_score()
得到的結果是:0.745
我們也可以通過混淆矩陣計算正确率
性能提成
再上述K近鄰模型中,K=5,我們知道,對于不同的K值,将會得到不同的模型,是以嘗試取不同的K值,得到最優模型。
利用Python自動選取最優K值
用選取的最優K值進行預測
結果為:0.775
以上就是一個完整的機器學習流程。
本次的分享就到這裡了,
好書不厭讀百回,熟讀課思子自知。而我想要成為全場最靓的仔,就必須堅持通過學習來擷取更多知識,用知識改變命運,用部落格見證成長,用行動證明我在努力。 聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我部落格看看。 碼字不易,大家的支援就是我堅持下去的動力。點贊後不要忘了<code>關注</code>我哦!