99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀干貨 | 上手機(jī)器學(xué)習(xí),從搞懂這十大經(jīng)典算法開始
干貨 | 上手機(jī)器學(xué)習(xí),從搞懂這十大經(jīng)典算法開始
2018-07-03
收藏

干貨 | 上手機(jī)器學(xué)習(xí),從搞懂這十大經(jīng)典算法開始

機(jī)器學(xué)習(xí)領(lǐng)域,“沒有免費(fèi)的午餐”是一個(gè)不變的定理。簡(jiǎn)而言之,沒有一種算法是完美的,可以作為任何問題的最佳解決方案。認(rèn)清這一點(diǎn),對(duì)于解決監(jiān)督學(xué)習(xí)問題(如預(yù)測(cè)建模問題)尤其重要。

我們不能總說神經(jīng)網(wǎng)絡(luò)就是比決策樹好,反之亦然。影響算法性能的因素有很多,比如數(shù)據(jù)集的大小和結(jié)構(gòu)。

因此,對(duì)于自己的問題,要嘗試多種不同的算法,并使用測(cè)試數(shù)據(jù)集來評(píng)估各個(gè)算法的性能,以選出效果最優(yōu)的那一個(gè)。

當(dāng)然,前面所嘗試的算法必須要適合自己的問題,這也正是你要選對(duì)正確的機(jī)器學(xué)習(xí)任務(wù)的地方。比如,需要打掃房子的時(shí)候,你會(huì)使用真空吸塵器、掃帚或拖把,但絕不應(yīng)該用鏟子在屋內(nèi)挖坑。

重要的原則

話雖如此,但所有用于預(yù)測(cè)建模的有監(jiān)督機(jī)器學(xué)習(xí)算法卻有一個(gè)共同的原則:

機(jī)器學(xué)習(xí)算法的本質(zhì)是找到一個(gè)目標(biāo)函數(shù)(f),使其成為輸入變量(X)到輸出變量(Y)之間的最佳映射:Y = f(X)

這是最常見的學(xué)習(xí)任務(wù),給定任意新的輸入變量(X),我們就能預(yù)測(cè)出輸出變量(Y)的值。因?yàn)槲覀儾恢滥繕?biāo)函數(shù)(f)的形式或樣子,所以才要機(jī)器去把它找出來。不然的話,我們就可以直接用目標(biāo)函數(shù)來進(jìn)行預(yù)測(cè)了,而非還要用機(jī)器學(xué)習(xí)算法來學(xué)習(xí)數(shù)據(jù)了。

最常見的機(jī)器學(xué)習(xí)類型就是找到最佳映射Y = f(X),并以此來預(yù)測(cè)新X所對(duì)應(yīng)的Y值。這一過程被稱為預(yù)測(cè)建?;蝾A(yù)測(cè)分析,目標(biāo)是盡可能到出最為準(zhǔn)確的預(yù)測(cè)。

對(duì)于渴望理解機(jī)器學(xué)習(xí)基本概念的各位新手,我們特地整理出數(shù)據(jù)科學(xué)家最常用的十大機(jī)器學(xué)習(xí)算法,便于大家快速上手。

1- 線性回歸

線性回歸可能是統(tǒng)計(jì)學(xué)和機(jī)器學(xué)習(xí)中最為知名、最易于理解的一個(gè)算法。

預(yù)測(cè)建模主要關(guān)注的是如何最小化模型的誤差,或是如何在一個(gè)可解釋性代價(jià)的基礎(chǔ)上做出最為準(zhǔn)確的預(yù)測(cè)。我們將借用、重用和竊取包括統(tǒng)計(jì)學(xué)在內(nèi)的多個(gè)不同領(lǐng)域的算法,并將其用于這些目的。

線性回歸所表示的是描述一條直線的方程,通過輸入變量的特定權(quán)重系數(shù)(B)來找出輸入變量(x)和輸出變量(y)之間最適合的映射關(guān)系。


線性回歸

例如:y = B0 + B1 * x

給定輸入x,我們可以預(yù)測(cè)出y的值。線性回歸學(xué)習(xí)算法的目標(biāo)是找到系數(shù)B0和B1的值。

找出數(shù)據(jù)的線性回歸模型有多種不同的技巧,例如將線性代數(shù)解用于普通最小二乘法和梯度下降優(yōu)化問題。

線性回歸業(yè)已存在200多年,并已被廣泛研究過。使用該算法的一些竅門,是盡可能地去除非常相似的相關(guān)變量以及數(shù)據(jù)中的噪聲。這是一個(gè)快速、簡(jiǎn)單而又好用的算法。

2 - 邏輯回歸

邏輯回歸機(jī)器學(xué)習(xí)借自統(tǒng)計(jì)領(lǐng)域的另一項(xiàng)技術(shù),用于解決二元分類問題(有兩個(gè)類值的問題)。

邏輯回歸就像線性回歸,因?yàn)樗哪繕?biāo)是找出每個(gè)輸入變量的加權(quán)系數(shù)值。與線性回歸不同的是,邏輯回歸預(yù)測(cè)輸出值的函數(shù)是非線性的,也被稱為邏輯函數(shù)。

邏輯回歸的函數(shù)圖像看起來是一個(gè)大的S形,并將任何值轉(zhuǎn)換至0到1的區(qū)間。這種形式非常有用,因?yàn)槲覀兛梢杂靡粋€(gè)規(guī)則把邏輯函數(shù)的值轉(zhuǎn)化成0和1(例如,如果函數(shù)值小于0.5,則輸出1),從而預(yù)測(cè)類別。

邏輯回歸

基于模型學(xué)習(xí)的方式,邏輯回歸的輸出值也可以用來預(yù)測(cè)給定數(shù)據(jù)實(shí)例屬于類別0和類別1的概率。當(dāng)你的預(yù)測(cè)需要更多依據(jù)時(shí),這一點(diǎn)會(huì)非常有用。

線性回歸一樣,當(dāng)你剔除與輸出變量無關(guān)或與之除非常相似(相關(guān))的屬性后,邏輯回歸的效果會(huì)更好。對(duì)于二元分類問題,它是一個(gè)易于上手、快速而又有效的模型。

3 - 線性判別分析

一般說,邏輯回歸僅限于二元分類問題。 但如果分類類別超過兩個(gè),線性判別分析就成為你首選的線性分類算法。

線性判別分析的表達(dá)式非常簡(jiǎn)單。 它由數(shù)據(jù)的統(tǒng)計(jì)屬性組成,并計(jì)算每個(gè)類別的屬性值。對(duì)于單個(gè)輸入變量,它包括:

每個(gè)類別的平均值。

所有類別的方差。



線性判別分析

線性判別分析通過計(jì)算每個(gè)類別的差別值,并對(duì)擁有最大值的類別進(jìn)行預(yù)測(cè)。 該方法假定數(shù)據(jù)服從高斯分布(鐘形曲線),因此預(yù)測(cè)前從數(shù)據(jù)中移除異常值會(huì)是一個(gè)很好的習(xí)慣。對(duì)于分類預(yù)測(cè)問題來說,它是一個(gè)簡(jiǎn)單而又強(qiáng)大的方法。

4 - 分類和回歸樹

決策樹是用于預(yù)測(cè)建模的一種重要機(jī)器學(xué)習(xí)算法。

決策樹模型的表現(xiàn)形式為二叉樹,也就是來自算法和數(shù)據(jù)結(jié)構(gòu)方面的二叉樹,沒有什么特別。樹上每個(gè)節(jié)點(diǎn)代表一個(gè)輸入變量(x)與一個(gè)基于該變量的分離點(diǎn)(假定這個(gè)變量是數(shù)字)。

決策樹

葉節(jié)點(diǎn)包含了用于預(yù)測(cè)的輸出變量(y)。預(yù)測(cè)是通過遍歷樹的分離點(diǎn)開始,直到抵達(dá)每一個(gè)葉節(jié)點(diǎn),并輸出該葉節(jié)點(diǎn)的分類值。

決策樹算法學(xué)習(xí)起來很快,預(yù)測(cè)速度也很快。決策樹對(duì)于各種各樣的問題都能做出準(zhǔn)確的預(yù)測(cè),并且無需對(duì)數(shù)據(jù)做任何特殊的預(yù)處理。

5 - 樸素貝葉斯

樸素貝葉斯是一種簡(jiǎn)單而又強(qiáng)大的預(yù)測(cè)建模算法。

該模型由兩種概率組成,它們都能從訓(xùn)練數(shù)據(jù)中直接計(jì)算出來:1)每個(gè)類別的概率; 2)對(duì)于給定的x值,每個(gè)類別的條件概率。 一旦計(jì)算出來,概率模型就可以用于使用貝葉斯定理對(duì)新的數(shù)據(jù)進(jìn)行預(yù)測(cè)。 當(dāng)你的數(shù)據(jù)是實(shí)值時(shí),通常會(huì)假定一個(gè)高斯分布(鐘形曲線),這樣你就很容易計(jì)算出這些數(shù)據(jù)的概率。

樸素貝葉斯

樸素貝葉斯假定每個(gè)輸入變量都是獨(dú)立,所以被稱為“樸素的”。這是一個(gè)強(qiáng)假設(shè),對(duì)真實(shí)數(shù)據(jù)而言有點(diǎn)不切實(shí)際,但該方法在大范圍的復(fù)雜問題上非常有效。

6 - K-最近鄰算法

K-最近鄰算法是一種非常簡(jiǎn)單和有效。它的模型所表示是整個(gè)訓(xùn)練數(shù)據(jù)集,看上去很簡(jiǎn)單,對(duì)吧?

對(duì)于給定的訓(xùn)練數(shù)據(jù),通過搜索整個(gè)數(shù)據(jù)集中K個(gè)最相似的實(shí)例(鄰居),匯總這K個(gè)實(shí)例的輸出變量可以預(yù)測(cè)新的數(shù)據(jù)點(diǎn)。對(duì)于回歸問題,它可能是輸出變量的平均值;對(duì)于分類問題,它可能是模式(或最常見的)類別值。

使用K-最近鄰算法的訣竅,是在于如何確定數(shù)據(jù)實(shí)例之間的相似性。最簡(jiǎn)單的方法,如果你的屬性在歐幾里德距離上尺度相同(例如均以英寸為單位),那么基于每個(gè)輸入變量之間的差異,你就可以直接計(jì)算其數(shù)值來確定相似性。


K-最近鄰算法可能需要大量的內(nèi)存或存儲(chǔ)空間來儲(chǔ)存所有數(shù)據(jù),但只有在預(yù)測(cè)時(shí)才會(huì)執(zhí)行計(jì)算(或?qū)W習(xí))。你也可以隨時(shí)更新和管理你的訓(xùn)練實(shí)例,以保持預(yù)測(cè)的準(zhǔn)確性。

距離或緊密度的概念在非常高的維度(大量的輸入變量)中可能會(huì)失效,因?yàn)檩斎胱兞康臄?shù)量對(duì)于算法性能有著很大的負(fù)面影響。這就是維度災(zāi)難。這就要求你只使用那些與預(yù)測(cè)輸出變量最相關(guān)的輸入變量。

7 - 學(xué)習(xí)向量量化

K-最近鄰算法的一個(gè)缺點(diǎn)是你需要使用整個(gè)訓(xùn)練數(shù)據(jù)集。而作為人工神經(jīng)網(wǎng)絡(luò),學(xué)習(xí)向量量化算法(簡(jiǎn)稱LVQ)允許你選擇訓(xùn)練實(shí)例的數(shù)量,并能準(zhǔn)確地學(xué)習(xí)這些實(shí)例所應(yīng)有的特征

學(xué)習(xí)向量量化

學(xué)習(xí)向量量化算法所表示的是碼本向量的集合。這些向量在初始化的時(shí)候隨機(jī)選擇出來,并在學(xué)習(xí)算法的多次迭代中優(yōu)化成最能概括訓(xùn)練數(shù)據(jù)集的集合。在學(xué)習(xí)完成后,碼本向量可以像K-最近鄰算法一樣進(jìn)行預(yù)測(cè)。通過計(jì)算每個(gè)碼本向量和新數(shù)據(jù)實(shí)例之間的距離來找到最相似的鄰居(最佳匹配碼本向量),然后返回最佳匹配單元的類別值或(在回歸情況下的實(shí)際值)作為預(yù)測(cè)。如果能重新調(diào)整數(shù)據(jù)使其處于相同的區(qū)間(如0到1之間),則可以獲得最佳的預(yù)測(cè)結(jié)果。

如果K-最近鄰算法在你的數(shù)據(jù)集上已經(jīng)給出了很好的預(yù)測(cè)結(jié)果,那么可以嘗試用學(xué)習(xí)向量量化算法來減少整個(gè)訓(xùn)練數(shù)據(jù)集的內(nèi)存存儲(chǔ)需求。

8 - 支持向量機(jī)

支持向量機(jī)可能是最受歡迎、討論最為廣泛的機(jī)器學(xué)習(xí)算法之一。

超平面是輸入變量空間內(nèi)的一條分割線。在支持向量機(jī)中,超平面可以通過類別(0類或1類)最佳分割輸入變量空間。在二維空間內(nèi),超平面可被視為一條線,我們假設(shè)所有的輸入點(diǎn)都可以被該線完全分開。支持向量機(jī)的目標(biāo)是找到一個(gè)分離系數(shù),讓一個(gè)超平面能夠?qū)Σ煌悇e的數(shù)據(jù)進(jìn)行最佳分割。

支持向量機(jī)

超平面與最近的數(shù)據(jù)點(diǎn)之間的距離被稱為邊距。在分離兩個(gè)類上具有最大邊距的超平面被稱為最佳超平面。超平面的確定只跟這些點(diǎn)及分類器的構(gòu)造有關(guān)。這些點(diǎn)被稱為支持向量,它們支持并定義超平面。在實(shí)踐中,可以使用優(yōu)化算法來找到能夠最大化邊距的系數(shù)。

支持向量機(jī)可能是最為強(qiáng)大的“開箱即用”分類器之一,值得你嘗試。

9 - bagging算法和隨機(jī)森林

隨機(jī)森林是最流行、最強(qiáng)大的機(jī)器學(xué)習(xí)算法之一。它是一種被稱為Bootstrap Aggregation或Bagging的機(jī)器學(xué)習(xí)集成算法。

Bootstrap是一種從數(shù)據(jù)樣本中估算數(shù)量的強(qiáng)大統(tǒng)計(jì)方法。換句話說,你需要抽取大量的數(shù)據(jù)樣本、計(jì)算平均值,然后再計(jì)算所有均值的平均,以便更好地估計(jì)整體樣本的真實(shí)平均值。

bagging算法也使用相同的方式,但用于估計(jì)整個(gè)統(tǒng)計(jì)模型的最常見方法是決策樹。訓(xùn)練數(shù)據(jù)中的多個(gè)樣本將被取樣,然后對(duì)每個(gè)數(shù)據(jù)樣本建模。對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)時(shí),每個(gè)模型都會(huì)進(jìn)行預(yù)測(cè),并對(duì)每個(gè)預(yù)測(cè)結(jié)果進(jìn)行平均,以更好地估計(jì)真實(shí)的輸出值。

隨機(jī)森林

隨機(jī)森林是對(duì)bagging算法的一種調(diào)整,它不是選擇最佳分割點(diǎn)來創(chuàng)建決策樹,而是通過引入隨機(jī)性來得到次優(yōu)分割點(diǎn)。

因此,針對(duì)每個(gè)數(shù)據(jù)樣本所創(chuàng)建的模型,會(huì)與其他方式有所不同,但仍能以其獨(dú)特和不同的方式準(zhǔn)確預(yù)測(cè)。結(jié)合所有模型的預(yù)測(cè),可以更好地估計(jì)潛在的真實(shí)輸出。

如果用方差較高的算法(如決策樹)能夠獲得較好的結(jié)果,那么通過bagging算法通??梢垣@得更好的結(jié)果。

10 - Boosting和AdaBoost算法

Boosting是一項(xiàng)從多個(gè)弱分類器中構(gòu)建強(qiáng)分類器的集成預(yù)測(cè)技術(shù)。它從訓(xùn)練數(shù)據(jù)中構(gòu)建模型,然后通過修正前一個(gè)模型的錯(cuò)誤創(chuàng)造出第二個(gè)模型。以此類推,模型不斷疊加,直至能夠完美預(yù)測(cè)訓(xùn)練數(shù)據(jù)集,或達(dá)到可添加的模型的數(shù)量上限。

在針對(duì)二元分類所開發(fā)的boosting算法中,AdaBoost是第一個(gè)成功的。它是理解boosting算法的最佳起點(diǎn)?,F(xiàn)代boosting方法基于AdaBoost而構(gòu)建,最典型的例子是隨機(jī)梯度加速器。


通常,AdaBoost算法與決策樹一起工作。第一個(gè)決策樹創(chuàng)建后,決策樹在每個(gè)訓(xùn)練實(shí)例上的性能,都被用來衡量下一個(gè)決策樹針對(duì)該實(shí)例所應(yīng)分配的關(guān)注程度。難以預(yù)測(cè)的訓(xùn)練數(shù)據(jù)被賦予更大的權(quán)重,而容易預(yù)測(cè)的數(shù)據(jù)則被賦予更小的權(quán)重。模型依次被創(chuàng)建,每次更新訓(xùn)練實(shí)例的權(quán)重,都會(huì)影響到序列中下一個(gè)決策樹學(xué)習(xí)性能。所有決策樹完成后,即可對(duì)新輸入的數(shù)據(jù)進(jìn)行預(yù)測(cè),而每個(gè)決策樹的性能將由它在訓(xùn)練數(shù)據(jù)上的準(zhǔn)確度所決定。

由于模型注意力都集中于糾正上一個(gè)算法的錯(cuò)誤,所以必須確保數(shù)據(jù)是干凈無異常的。

▌ 最后的建議

初學(xué)者常常會(huì)被眼花繚亂的機(jī)器學(xué)習(xí)算法所困擾,提出“我該使用哪種算法?”這樣的問題。

此問題的答案取決于許多因素,包括:

(1)數(shù)據(jù)的大小、質(zhì)量和性質(zhì);

(2)可用的計(jì)算時(shí)間;

(3)任務(wù)的緊迫性;

(4)你想要用數(shù)據(jù)來做什么。

即使是一位經(jīng)驗(yàn)豐富的數(shù)據(jù)科學(xué)家,在嘗試不同的算法之前,也無法回答哪種算法的性能會(huì)是最好的。機(jī)器學(xué)習(xí)的算法還有很多,但以上這些是最受歡迎的算法。如果你剛?cè)腴T機(jī)器學(xué)習(xí),這將是一個(gè)很好的學(xué)習(xí)起點(diǎn)。


數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請(qǐng)參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }