學(xué)習(xí)數(shù)據(jù)挖掘算法也有一段時間了,某天小伙伴問我,你學(xué)的這個跟我們之前學(xué)校學(xué)的數(shù)據(jù)結(jié)構(gòu)算法有什么區(qū)別嗎。我很快回答:當(dāng)然有區(qū)別啊。其實過后細(xì)想,究竟有啥區(qū)別。就是因為這個問題,才有了今天這篇文章。
那么在我們開始前,可以先暫停閱讀一分鐘,回憶下已了解數(shù)據(jù)結(jié)構(gòu)的算法還有數(shù)據(jù)挖掘算法,思考下這兩種算法有區(qū)別嗎。
下面我們稱數(shù)據(jù)結(jié)構(gòu)算法為經(jīng)典算法。
首先我們來看看算法是什么
看看維基百科的定義
算法(algorithm),在數(shù)學(xué)(算學(xué))和計算機(jī)科學(xué)之中,為任何良定義的具體計算步驟的一個序列,常用于計算、數(shù)據(jù)處理和自動推理。精確而言,算法是一個表示為有限長列表的有效方法。
好吧有點(diǎn)拗口,解釋成大白話就是:
是解決問題的一系列步驟。

經(jīng)典算法是什么
是對存儲的數(shù)據(jù)進(jìn)行處理,最終得到問題的答案。
再翻譯成大白話就是
是對確定的數(shù)據(jù) 使用如數(shù)組,鏈表,隊列,圖等一系列存儲結(jié)構(gòu)進(jìn)行存儲,通過優(yōu)化時間復(fù)雜度以及空間復(fù)雜度提高效率來對數(shù)據(jù)進(jìn)行處理,得出問題答案的過程。
下面是一些重要的經(jīng)典算法類別
搜索,排序,插入,更新。
常見的經(jīng)典算法有
分治法,動態(tài)規(guī)劃法,貪心算法等。

下面我們看下例子,加深理解。
例如,對已知的一組亂序的數(shù)字進(jìn)行排序。又或者如果一個數(shù)組包含多個重復(fù)元素,如何找到這些重復(fù)的數(shù)字?
像上面的問題我們就可以運(yùn)用選擇我們熟悉的排序算法進(jìn)行排序。對于第二個問題可以運(yùn)用哈希表這種數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲,然后遍歷統(tǒng)計元素出現(xiàn)次數(shù)得出我們問題的答案。
我們可以發(fā)現(xiàn),經(jīng)典算法主要針對確定的數(shù)據(jù)進(jìn)行合適的存儲處理,并通過增刪改查一系列操作后達(dá)到一個比較確定的結(jié)果,不存在不確定成分。同時非常注重效率。
數(shù)據(jù)挖掘算法是什么
數(shù)據(jù)挖掘算法是一類從數(shù)據(jù)中運(yùn)用數(shù)學(xué)工具自動分析獲得規(guī)律,并利用規(guī)律對未知數(shù)據(jù)進(jìn)行預(yù)測的算法,注重數(shù)據(jù)來源以及數(shù)據(jù)規(guī)律。
一般分為三類:監(jiān)督學(xué)習(xí)( Supervised Learning ),非監(jiān)督學(xué)習(xí)( Unsupervised Learning ),還有強(qiáng)化學(xué)習(xí)( Reinforcenment Learning )。比較常見的數(shù)據(jù)挖掘算法有KNN算法,決策樹,貝葉斯,線性回歸,支持向量機(jī),神經(jīng)網(wǎng)絡(luò)等等

下面我們看下例子,加深理解。
例如根據(jù)已有的房價信息預(yù)測某一樓盤的房價;或者給某部電影分類
像上面的問題我們可以運(yùn)用線性回歸方法對房價進(jìn)行預(yù)測??梢愿鶕?jù)電影特征使用KNN或者決策樹等分類算法進(jìn)行分類。
我們可以發(fā)現(xiàn)數(shù)據(jù)挖掘算法要解決的問題一般是沒有精確解的,并側(cè)重于從已有數(shù)據(jù)里面挖掘出未知的知識。像上面的例子,我們一開始并不知道房價 具體是有哪些影響因素,電影分類有哪些影響特性,全都是算法依據(jù)統(tǒng)計原理,數(shù)據(jù)規(guī)律自己在‘學(xué)習(xí)’中得出的,而且最后得出的結(jié)果也不一定確定
下面我們從不同角度再具體比較兩種算法
從目的做比較
經(jīng)典算法:對確定的數(shù)據(jù)進(jìn)行顯而易見的操作,并注重效率(時間復(fù)雜度和空間復(fù)雜度)。例如排序。
數(shù)據(jù)挖掘算法:建立一個模式,學(xué)會對未知的數(shù)據(jù)進(jìn)行預(yù)測或者分類。
從應(yīng)用數(shù)學(xué)的深度以及廣度做比較
經(jīng)典算法:初等數(shù)學(xué);簡單概率論,簡單離散數(shù)學(xué)。
數(shù)據(jù)挖掘:高等數(shù)學(xué);概率論,線性代數(shù),數(shù)理統(tǒng)計,微積分,運(yùn)籌學(xué),信息論,最優(yōu)化方法。
從評價標(biāo)準(zhǔn)做比較
經(jīng)典算法:執(zhí)行效率;時間復(fù)雜度,空間復(fù)雜度。
數(shù)據(jù)挖掘: 準(zhǔn)確率;泛化能力,經(jīng)驗風(fēng)險,結(jié)構(gòu)風(fēng)險。例如正確率,召回率。
從解決問題的種類做比較
經(jīng)典算法:解決傳統(tǒng) CS 領(lǐng)域問題;對數(shù)據(jù)進(jìn)行組織并進(jìn)行'CURD'操作。
數(shù)據(jù)挖掘:預(yù)測,分類等未知問題;研究數(shù)據(jù)內(nèi)在的規(guī)律。
舉個通俗的例子,比如你要去某個風(fēng)景區(qū),經(jīng)典算法可以跟你說怎么走最快,數(shù)據(jù)挖掘算法告訴你在那個風(fēng)景區(qū)哪個地方可能最好玩。
總結(jié)
區(qū)分它們二者是為了讓我們更好得運(yùn)用它們解決問題。 實際操作上,運(yùn)用數(shù)據(jù)挖掘算法時會大量應(yīng)用經(jīng)典算法來提升計算效率。
算法的核心是創(chuàng)建問題抽象的模型和明確求解目標(biāo),之后可以根據(jù)具體的問題選擇不同的模式和方法完成算法的設(shè)計。 而經(jīng)典算法和數(shù)據(jù)挖掘算法就是運(yùn)用了不同的模式和方法去解決不同的問題而已,各司其職。
所以最后我們可以得出,經(jīng)典算法和數(shù)據(jù)挖掘算法本質(zhì)都是算法,但是運(yùn)用的底層邏輯以及解決的問題的種類不一樣。不同的時代有不同的問題要解決,沒有高低之分,沒有說哪個更重要哪個更不重要的說法。
本文首發(fā)微信公眾號“哈爾的數(shù)據(jù)城堡”.