淺談數據挖掘與機器學習


        <div class="markdown_views"><h1 id="引言"><a name="t0" target="_blank"></a>引言</h1>

<p>在大多數非計算機專業人士以及部分計算機專業背景人士眼中,<strong><a href="http://lib.csdn.net/base/machinelearning" class="replace_word" title="機器學習知識庫" target="_blank" style="color:#df3434; font-weight:bold;">機器學習</a>(Data Mining)</strong>以及<strong>數據挖掘(Machine Learning)</strong>是兩個高深的領域。在筆者看來,這是一種過高”瞻仰“的習慣性錯誤理解(在這裏我加了好多定語)。事實上,這兩個領域與計算機其他領域一樣都是在融匯理論和實踐的過程中不斷熟練和深入,不同之處僅在於滲透了更多的數學知識(主要是統計學),在後面的文章中我會努力將這些數學知識以一種更容易理解的方式講解給大家。本文從基本概念出發淺析他們的關係和異同,不講具體<a href="http://lib.csdn.net/base/datastructure" class="replace_word" title="算法與數據結構知識庫" target="_blank" style="color:#df3434; font-weight:bold;">算法</a>和數學公式。希望對大家能有所幫助。</p>



<h1 id="幾個相關示例"><a name="t1" target="_blank"></a>幾個相關示例</h1>

<p>首先,給大家列舉一些生活中與數據挖掘、機器學習相關的應用示例以幫助大家更好的理解。</p>

<p><strong>示例1(關聯問題):</strong> <br>
經常去超市的同學可能會發現,我們事先在購物清單上列舉好的某些商品可能會被超市阿姨擺放在相鄰的區域。例如,    麪包櫃檯旁邊會擺上黃油、麪條櫃檯附近一定會有老乾媽等等。這樣的物品擺放會讓我們的購物過程更加快捷、輕鬆。</p>

<p>那麼如何知道哪些物品該擺放在一塊?又或者用戶在購買某一個商品的情況下購買另一個商品的概率有多大?這就要利用關聯數據挖掘的相關算法來解決。</p>

<p><strong>示例2(分類問題):</strong> <br>
在嘈雜的廣場上,身邊人來人往。仔細觀察他們的外貌、衣着、言行等我們會不自覺地斷論這個人是新疆人、東北人或者是上海人。又例如,在剛剛結束的2015NBA總決賽中,各類權威機構會大量分析騎士隊與勇士隊的歷史數據從而得出騎士隊或者勇士隊是否會奪冠的結論。</p>

<p>在上述第一個例子中,由於地域衆多,在對人進行地域分類的時候這是一個典型的多分類問題。而在第二個例子中各類機構預測勇士隊是否會戰勝騎士隊奪冠,這是一個二分類問題,其結果只有兩種。二分類問題在業界的出鏡率異常高,例如在推薦系統中預測一個人是否會買某個商品、其他諸如地震預測、火災預測等等。</p>

<p><strong>示例3(聚類問題):</strong> <br>
”物以類聚,人以羣分“,生活中到處都有聚類問題的影子。假設銀行擁有若干客戶的歷史消費記錄,現在由於業務擴張需要新增幾款面對不同人羣的理財產品,那麼如何才能準確的將不同的理財產品通過電話留言的方式推薦給不同的人羣?這便是一個聚類問題,銀行一般會將所有的用戶進行聚類,有相似特徵的用戶屬於同一個類別,最後將不同理財產品推薦給相應類別的客戶。</p>

<p><strong>示例4(迴歸問題):</strong> <br>
迴歸問題或者稱作預測問題同樣也是一個生活中相當接地氣的應用。大家知道,證券公司會利用歷史數據對未來一段時間或者某一天的股票價格走勢進行預測。同樣,房地產商也會根據地域情況對不同面積樓層的房產進行定價預測。</p>

<p>上述兩個示例都是迴歸問題的典型代表,這類問題往往根據一定的歷史數據對某一個指定條件下的目標預測一個實數值。</p>

<p>相信經過上面通俗易懂的示例,大家應該初步瞭解數據挖掘以及機器學習會應用到哪些問題之上(這裏列舉的四類問題是很常見的,當然還有例如異常檢測等應用),這就解決了面對一個新問題三要素中的<strong>Why</strong>。下面解釋什麼是機器學習與數據挖掘(即<strong>What</strong>)以及他們的關係和異同點。</p>



<h1 id="機器學習"><a name="t2" target="_blank"></a>機器學習</h1>

<blockquote>
  <p>機器學習這門學科所關注的問題是:計算機程序如何隨着經驗積累自動提高性能。——Tom Mitchell</p>
</blockquote>

<p>上述定義是Tom Mitchell在其著作《機器學習》中給出的定義。這個定義簡單明瞭但是卻蘊含了太多東西。</p>

<p>通俗的來將,我們寫一段程序讓計算機自己進行一個學習過程,直到達到一個滿意程度。那麼學習的目的是什麼?怎樣學習?滿意程度又是如何定義的呢?</p>

<p>通常,假設我們的目標是一個function f,我們會給計算機提供一定的訓練數據讓其進行學習訓練,每一次的學習會訓練出一個hypothesis h,當h和f隨着計算機不斷學習越來越接近時,就說h越來越達到滿意程度。而滿意程度的度量是用誤差e來度量的(針對不同情況有不同的方式)。更簡單的說,機器學習就是通過數據訓練找一個合適的目標函數的過程。而目前,機器學習學科應用到了大量的統計學知識,我們也稱其爲統計機器學習。</p>

<p>下面給大家解釋一下必須知道的幾個概念。</p>



<h2 id="學習方式"><a name="t3" target="_blank"></a>學習方式</h2>

<p>根據數據類型的不同,對一個問題的建模有不同的方式。將算法按照學習方式分類是一個不錯的想法,這樣可以讓人們在建模和算法選擇的時候考慮能根據輸入數據來選擇最合適的算法來獲得最好的結果。在機器學習領域,有幾種主要的學習方式:</p>

<p><strong>1.監督學習(supervised learning)</strong> <br>
在監督式學習下,每組訓練數據有一個明確的標識或結果,如對人按地域分類中的“新疆”、“上海”、“東別”等屬於地域標識。在建立預測模型的時候,監督式學習建立一個學習過程,將預測結果與“訓練數據”的實際結果進行比較,不斷的調整預測模型,直到模型的預測結果達到一個預期的準確率。 <br>
<img src="https://img-blog.csdn.net/20150817191635041" alt="這裏寫圖片描述" title=""></p>

<p>上述示例中的分類問題和迴歸問題都屬於監督學習範疇。其中常用的分類算法包括:<strong>決策樹分類法(Decision Tree)</strong>(<a href="http://blog.csdn.net/yangmuted/article/details/47616255" target="_blank">參考我之前的文章</a>),<strong>樸素貝葉斯分類算法(Native <a href="http://blog.csdn.net/yangmuted/article/details/47420591" target="_blank">Bayesian Classifier)</a></strong>、基於<strong>支持向量機(SVM)</strong>的分類器、<strong>神經網絡法(Neural Network)</strong>、<strong>k-最近鄰法(k-nearest neighbor,kNN)</strong>等。</p>

<p><strong>2.非監督式學習(unsupervised learning)</strong> <br>
在非監督式學習中,數據並不被標識,學習模型是爲了推斷出數據的一些內在結構。前面四個示例中的關聯問題和聚類問題屬於非監督學習的範疇。關聯問題中常見算法包括<strong>Apriori</strong>(<a href="http://blog.csdn.net/yangmuted/article/details/47420591" target="_blank">該算法基於Spark的並行化算法參考我之前文章</a>)、<strong>FP-Growth</strong>以及<strong>Eclat</strong>等,而聚類問題中最經典的算法當屬<strong>k-Means</strong>。 <br>
<img src="https://img-blog.csdn.net/20150817191658699" alt="這裏寫圖片描述" title=""></p>

<p><strong>3.半監督式學習(semi-supervised learning)</strong> <br>
在半監督式學習學習方式下,輸入數據部分被標識,部分沒有被標識,這種學習模型可以用來進行預測,但是模型首先需要學習數據的內在結構以便合理的組織數據來進行預測。應用場景包括分類和迴歸,算法包括一些對常用監督式學習算法的延伸,這些算法首先試圖對未標識數據進行建模,在此基礎上再對標識的數據進行預測。如<strong>圖論推理算法(Graph Inference)</strong>或者<strong>拉普拉斯支持向量機(Laplacian SVM.)</strong>等。 <br>
<img src="https://img-blog.csdn.net/20150817192603318" alt="這裏寫圖片描述" title=""></p>

<p><strong>4.強化學習(reinforcement learning)</strong> <br>
在這種學習模式下,輸入數據作爲對模型的反饋,不像監督模型那樣,輸入數據僅僅是作爲一個檢查模型對錯的方式,在強化學習下,輸入數據直接反饋到模型,模型必須對此立刻作出調整。常見的應用場景包括動態系統以及<a href="http://lib.csdn.net/base/robot" class="replace_word" title="機器人知識庫" target="_blank" style="color:#df3434; font-weight:bold;">機器人</a>控制等。常見算法包括<strong>Q-Learning</strong>以及<strong>時間差學習(Temporal difference learning)</strong> <br>
<img src="https://img-blog.csdn.net/20150817194911306" alt="這裏寫圖片描述" title=""></p>

<p>以上算法的核心思想及實現在後續的博文中我都會一一向大家講解。</p>



<h1 id="數據挖掘"><a name="t4" target="_blank"></a>數據挖掘</h1>

<p>在上一節,我們初步討論了機器學習的基礎知識、學習方式、常用算法等。這一節我們繼續討論數據挖掘的相關知識。</p>

<blockquote>
  <p>數據挖掘(Data mining),又譯爲資料探勘、數據採礦。它是<a href="http://lib.csdn.net/base/mysql" class="replace_word" title="MySQL知識庫" target="_blank" style="color:#df3434; font-weight:bold;">數據庫</a>知識發現(英語:Knowledge-Discovery in Databases,簡稱:KDD)中的一個步驟。數據挖掘一般是指從大量的數據中通過算法搜索隱藏於其中信息的過程。數據挖掘通常與計算機科學有關,並通過統計、在線分析處理、情報檢索、機器學習、專家系統(依靠過去的經驗法則)和模式識別等諸多方法來實現上述目標。</p>
</blockquote>

<p>從上面的定義可以看出數據挖掘相對於機器學習而言是一個更加偏向應用的領域。實際上,數據挖掘是一門涉及面很廣的交叉學科,在處理各種問題時,只要我們清楚了業務邏輯那麼就可以將問題轉換爲挖掘問題。</p>

<p>數據挖掘的處理過程一般包括數據預處理(ETL、數據清洗、數據集成等),數據倉庫(可以是DBMS、大型數據倉庫以及分佈式存儲系統)與OLAP,使用各種算法(主要是機器學習的算法)進行挖掘以及最後的評估工作。</p>

<p>簡言之,數據挖掘是一系列的處理過程,最終的目的是從數據中挖掘出你想要的或者意外收穫的信息。下圖展示了數據挖掘的衆多應用領域。 <br>
<img src="https://img-blog.csdn.net/20150817223521660" alt="這裏寫圖片描述" title=""></p>



<h1 id="數據挖掘與機器學習的關係"><a name="t5" target="_blank"></a>數據挖掘與機器學習的關係</h1>

<p>在上面我們分別介紹了機器學習與數據挖掘的基本概念,應用,相關算法等內容。接下來繼續討論兩者的關係與異同。</p>

<blockquote>
  <p>統計學——1749年 <br>
  人工<a href="http://lib.csdn.net/base/aiplanning" class="replace_word" title="人工智能規劃與決策知識庫" target="_blank" style="color:#df3434; font-weight:bold;">智能</a>——1940年 <br>
  機器學習——1946年 <br>
  數據挖掘——1980年</p>
</blockquote>

<p>從歷史的發展可以看出數據挖掘是一門新興學科,其建立在強有力的知識體系之上,使用了大量的機器學習算法,同時根據上一節的敘述,數據挖掘也使用了一系列的工程技術。而機器學習則是以統計學爲支撐的一門偏理論的學科,其不需要考慮諸如數據倉庫,OLAP等應用工程技術。</p>

<p>簡言之,機器學習是一門更加偏向理論性學科,其目的是爲了讓計算機不斷學習找到接近目標函數f的假設h。而數據挖掘則是使用了包括機器學習算法在內的衆多知識的一門應用學科,它主要是使用一系列處理方法挖掘數據背後的信息。</p>



<h1 id="參考文獻及推薦閱讀"><a name="t6" target="_blank"></a>參考文獻及推薦閱讀</h1>

<ol>
<li>機器學習,Tom M.Mitchhell著;</li>
<li>數據挖掘概念與技術,[美] Micheling Kamber/ Jian Pei 等著;</li>
<li><a href="http://blog.jobbole.com/77620/" target="_blank">http://blog.jobbole.com/77620/</a></li>
<li><a href="http://blog.csdn.net/v_july_v/article/details/7577684" target="_blank">http://blog.csdn.net/v_july_v/article/details/7577684</a></li>
</ol>

<p>(by希慕,新浪微博:@<a href="http://weibo.com/XimuNorth" target="_blank">希慕_North</a>)</p></div>
        <script type="text/javascript">
            $(function () {
                $('pre.prettyprint code').each(function () {
                    var lines = $(this).text().split('\n').length;
                    var $numbering = $('<ul></ul>').addClass('pre-numbering').hide();
                    $(this).addClass('has-numbering').parent().append($numbering);
                    for (i = 1; i <= lines; i++) {
                        $numbering.append($('<li></li>').text(i));
                    };
                    $numbering.fadeIn(1700);
                });
            });
        </script>
   


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章