作 者 簡 介
馬文輝,MathWorks中國應用工程師, 南開大學工學博士,在大數據處理與分析領域有多年研究與開發經驗;曾就職於Nokia中國研究院,Adobe中國研發中心以及IBM中國。
近年來,全國賽的題目中,多多少少都有些數據,而且數據量總體來說呈不斷增加的趨勢, 這是由於在科研界和工業界已積累了比較豐富的數據,伴隨大數據概念的興起及機器學習技術的發展, 這些數據需要轉化成更有意義的知識或模型。 所以在建模比賽中, 只要數據量還比較大, 就有機器學習的用武之地。
1. MATLAB機器學習概況
機器學習 ( Machine Learning ) 是一門多領域交叉學科,它涉及到概率論、統計學、計算機科學以及軟件工程。機器學習是指一套工具或方法,憑借這套工具和方法,利用歷史數據對機器進行“訓練”進而“學習”到某種模式或規律,並建立預測未來結果的模型。
機器學習涉及兩類學習方法(如圖1):有監督學習,主要用於決策支持,它利用有標識的歷史數據進行訓練,以實現對新數據的標識的預測。有監督學習方法主要包括分類和回歸;無監督學習,主要用於知識發現,它在歷史數據中發現隱藏的模式或內在結構。無監督學習方法主要包括聚類。

圖1 機器學習方法
MATLAB 統計與機器學習工具箱(Statistics and Machine Learning Toolbox)支持大量的分類模型、回歸模型和聚類的模型,並提供專門應用程序(APP),以圖形化的方式實現模型的訓練、驗證,以及模型之間的比較。
-
分類
分類技術預測的數據對象是離散值。例如,電子郵件是否為垃圾郵件,腫瘤是癌性還是良性等等。 分類模型將輸入數據分類。 典型應用包括醫學成像,信用評分等。MATLAB 提供的分類算法包括:

圖2 分類算法家族
-
回歸
回歸技術預測的數據對象是連續值。 例如,溫度變化或功率需求波動。 典型應用包括電力負荷預測和算法交易等。回歸模型包括一元回歸和多元回歸,線性回歸和非線性回歸,MATLAB 提供的回歸算法有:

圖3 回歸算法家族
-
聚類
聚類算法用於在數據中尋找隱藏的模式或分組。聚類算法構成分組或類,類中的數據具有更高的相似度。聚類建模的相似度衡量可以通過歐幾里得距離、概率距離或其他指標進行定義。MATLAB 支持的聚類算法有:

圖4 聚類算法家族
以下將通過一些示例演示如何使用 MATLAB 提供的機器學習相關算法進行數據的分類、回歸和聚類。
2. 分類技術
-
支持向量機(SVM)
SVM 在小樣本、非線性及高維數據分類中具有很強的優勢。在 MATLAB 中,可以利用 SVM 解決二分類問題。同時也可以使用 SVM 進行數據的多分類划分。
1) 二分類
以下示例顯示了利用 MATLAB 提供的支持向量機模型進行二分類,並在圖中畫出了支持向量的分布情況(圖5中圓圈內的點表示支持向量)。MATLAB 支持 SVM 的核函數(KernelFunction 參數)有:線性核函數(Linear),多項式核函數(Polynomial)、高斯核函數(Gaussian)。
%% 支持向量機模型
load fisheriris;
% 數據只取兩個分類:‘versicolor' 和 'virginica'
inds = ~strcmp(species, 'setosa');
% 使用兩個維度
X = meas(inds,3:4);
y = species(inds);
tabulate(y)
Value Count Percent
versicolor 50 50.00%
verginica 50 50.00%
%% SVM模型訓練,使用線性核函數
SVMModel = fitcsvm(X, y, 'KernelFunction', 'linear' );
%% 查看進行數據划分的支持向量
sv = SVMModel.SupportVectors;
figure
gscatter( X( : , 1) , X( : , 2) ,y)
hold on
plot(sv( : , 1) , sv( : , 2) , 'ko' , 'MarkerSize' , 10)
legend( 'versicolor' , 'virginica' , 'Support Vector' )
hold off

圖5 支持向量分布
2) 多分類
MATLAB 多分類問題的處理是基於二分類模型.下面的示例演示如何利用 SVM 的二分類模型並結合 fitcecoc 函數解決多分類問題。
% 導入Fisher' s iris數據集
load fisheriris
X = meas;
Y = species;
tabulate(Y)
Value Count Percent
setosa 50 33.33%
versicolor 50 33.33%
virginica 50 33.33%
% 創建SVM模板(二分類模型),並對分類變量進行標准化處理
% predictors
t = templateSVM( 'Standardize' , 1);
% 基於SVM二分類模型進行訓練並生成多分類模型
Mdl = fitcecoc( X, Y, 'Learners' , t , . . . 'ClassNames' , {'setosa' , 'versicolor' , 'virginica'})
Mdl =
ClassificationECOC
ResponseName: 'Y'
CategoricalPredictors: [ ]
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
BinaryLearners: {3*1 cell}
CodingName: 'onevsone'
MATLAB 的 fitcecoc 函數支持多種二分類模型,例如, templateKNN, templateTree, templateLinear, templateNaiveBayes, 等等。
3. 回歸
回歸模型描述了響應(輸出)變量與一個或多個預測變量(輸入)變量之間的關系。 MATLAB 支持線性,廣義線性和非線性回歸模型。以下示例演示如何訓練邏輯回歸模型。
-
邏輯回歸
在 MATLAB 中,邏輯回歸屬於廣義線性回歸的范疇,可以通過使用 fitglm 函數實現邏輯回歸模型的訓練。
% 判定不同體重、年齡和性別的人的吸煙概率
load hospital
dsa = hospital;
% 指定模型使用的計算公式
% 公式的書寫方式符合 Wilkinson Notation, 詳情請查看:
% http://cn.mathworks.com/help/stats/wilkinson-notation.html
modelspec = 'Smoker ~ 1+ Age + Weight + Sex + Age:Weight + Age:Sex + Weight:Sex';
% 通過參數 ’Disribution' 指定 ‘binomial' 構建邏輯回歸模型
mdl = fitglm(dsa, modelspec, 'Distribution', 'binomial')

4. 聚類
聚類是將數據集分成組或類。 形成類,使得同一類中的數據非常相似,而不同類中的數據差異非常明顯。
-
層次聚類
下面以層次聚類方法為例,演示如何利用 MATLAB 進行聚類分析。
% 數據導入
load fisheriris
% MATLAB中層次聚類是通過linkage函數實現
% 通過參數可以配置距離計算方法
% 類內距離的計算方法:'euclidean' ,歐幾里得距離
eucD = pdist(mean , 'euclidean' );
% 類間距離的計算方法:'ward' ,最小化兩個類內點之間聚類平方和
Z = linkage(eucD, 'ward');
% 使用 cophenetic 相關系數評價聚類計算過程(類內距離最小,類間距離最大)
% 值越大表明距離計算結果越好
cophenet(Z, eucD)
ans = 0.872828315330562
%生成4個類別的聚類結果
c = cluster(Z, 'maxclust' , 4);
可以顯示層次聚類生成的聚類樹,使用 dendrogram 函數:
% 查看層次聚類樹
dendrogram(Z)

圖6 層次聚類
以上只是簡單的介紹了一下 MATLAB 支持的機器學習算法的使用方式,更多的信息可以查看 MathWorks 官網和 MATLAB 幫助文檔。
文中例程中的所有例程均可在 MATLAB 直接運行,程序使用的數據為 MATLAB 2017a 中的 demo 數據,大家快去動手實踐吧!
點擊閱讀原文,申請 MATLAB 正版軟件授權(數學建模競賽支持)。
* 友情提醒:9月8日晚上7點截止軟件下載申請。
往期 | 數模專欄

微信掃一掃
關注該公眾號
