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

熱線電話:13121318867

登錄
首頁(yè)精彩閱讀基于樹(shù)的建模-完整教程(R & Python)
基于樹(shù)的建模-完整教程(R & Python)
2016-05-06
收藏

基于樹(shù)的建模-完整教程(R & Python)

基于樹(shù)的學(xué)習(xí)算法被認(rèn)為是最好的方法之一,主要用于監(jiān)測(cè)學(xué)習(xí)方法。基于樹(shù)的方法支持具有高精度、高穩(wěn)定性和易用性解釋的預(yù)測(cè)模型。不同于線性模型,它們映射非線性關(guān)系相當(dāng)不錯(cuò)。他們善于解決手頭的任何問(wèn)題(分類或回歸)。

決策樹(shù)方法,隨機(jī)森林,梯度增加被廣泛用于各種數(shù)據(jù)科學(xué)問(wèn)題。因此,對(duì)于每一個(gè)分析師(新鮮),重要的是要學(xué)習(xí)這些算法和用于建模。

決策樹(shù)、隨機(jī)森林、梯度增加等方法被廣泛用于各種數(shù)據(jù)科學(xué)問(wèn)題。因此,對(duì)于每一個(gè)分析師(包括新人),學(xué)習(xí)這些算法并用于建模是非常重要的。

本教程是旨在幫助初學(xué)者從頭學(xué)習(xí)基于樹(shù)的建模。在成功完成本教程之后,有望初學(xué)者成為一個(gè)精通使用基于樹(shù)的算法并能夠建立預(yù)測(cè)模型的人。

注意:本教程不需要先驗(yàn)知識(shí)的機(jī)器學(xué)習(xí)。然而,了解R或Python的基礎(chǔ)知識(shí)將是有益的。開(kāi)始你可以遵循Python 和R的完整教程。

1.決策樹(shù)是什么?它是如何工作的呢?

決策樹(shù)是一種監(jiān)督學(xué)習(xí)算法(有一個(gè)預(yù)定義的目標(biāo)變量),主要是用于分類問(wèn)題。它適用于分類和連續(xù)的輸入和輸出變量。在這種方法中, 基于在輸入變量中最重要的分配器/微分器的區(qū)別,我們把人口或樣本分成兩個(gè)或兩個(gè)以上的均勻集(或群體)。

一個(gè)基于樹(shù)的建模的完整的教程(R & Python)第一部分

例子:-

假設(shè)我們有30名學(xué)生作為樣本,包含三個(gè)變量:性別(男孩/女孩),班級(jí)(IX/ X)和身高 (5到6英尺)。這30名學(xué)生中超過(guò)15人在閑暇時(shí)間打板球?,F(xiàn)在,我想創(chuàng)建一個(gè)模型來(lái)預(yù)測(cè)誰(shuí)會(huì)在休閑期間打板球。在這個(gè)問(wèn)題上,我們需要根據(jù)非常重要的三個(gè)輸入變量來(lái)隔離在閑暇時(shí)間打板球的學(xué)生。

這就是決策樹(shù)的幫助,它根據(jù)三變量的所有值和確定變量隔離學(xué)生,創(chuàng)造最好的同質(zhì)組學(xué)生(這是異構(gòu)的)。在下面的圖片中,您可以看到相比其他兩個(gè)變量性別變量是最好的能夠識(shí)別的均勻集。

一個(gè)基于樹(shù)的建模的完整的教程(R & Python)第一部分

正如上面提到的,決策樹(shù)識(shí)別最重要的變量,它最大的價(jià)值就是提供人口的均勻集。現(xiàn)在出現(xiàn)的問(wèn)題是,它是如何識(shí)別變量和分裂的?要做到這一點(diǎn),決策樹(shù)使用不同的算法,我們將在下一節(jié)中討論。

決策樹(shù)的類型

決策樹(shù)的類型是基于目標(biāo)變量的類型。它可以有兩種類型:

1.分類變量決策樹(shù): 有分類目標(biāo)變量的決策樹(shù)就稱為分類變量決策樹(shù)。例子:在上述情況下的學(xué)生問(wèn)題,目標(biāo)變量是“學(xué)生會(huì)打板球”,即“是”或“否”。

2.連續(xù)變量決策樹(shù): 有連續(xù)目標(biāo)變量的決策樹(shù)就稱為連續(xù)變量決策樹(shù)

例子:假設(shè)我們有一個(gè)問(wèn)題,預(yù)測(cè)客戶是否會(huì)支付他與保險(xiǎn)公司續(xù)保保險(xiǎn)費(fèi)(是 / 否)。在這里我們知道客戶的收入是一個(gè)重要的變量,但保險(xiǎn)公司沒(méi)有所有客戶收入的詳細(xì)信息?,F(xiàn)在,我們知道這是一個(gè)重要的變量,我們就可以建立一個(gè)決策樹(shù)來(lái)根據(jù)職業(yè)、產(chǎn)品和其他變量預(yù)測(cè)客戶收入。在這種情況下,我們的預(yù)計(jì)值為連續(xù)變量。

決策樹(shù)相關(guān)的重要術(shù)語(yǔ)

讓我們看看使用決策樹(shù)的基本術(shù)語(yǔ):

1.根節(jié)點(diǎn):它代表總體或樣本,這進(jìn)一步被分成兩個(gè)或兩個(gè)以上的均勻集。

2.分裂:它是將一個(gè)節(jié)點(diǎn)劃分成兩個(gè)或兩個(gè)以上的子節(jié)點(diǎn)的過(guò)程。

3.決策節(jié)點(diǎn):當(dāng)子節(jié)點(diǎn)進(jìn)一步分裂成子節(jié)點(diǎn),那么它被稱為決策節(jié)點(diǎn)。

4.葉/終端節(jié)點(diǎn):節(jié)點(diǎn)不分裂稱為葉或終端節(jié)點(diǎn)。

一個(gè)基于樹(shù)的建模的完整的教程(R & Python)第一部分

5.修剪:當(dāng)我們刪除一個(gè)決定節(jié)點(diǎn)的子節(jié)點(diǎn),這個(gè)過(guò)程稱為修剪。也可以說(shuō)相反分裂的過(guò)程。

6.分支/子樹(shù):整個(gè)樹(shù)的子部分稱為分行或子樹(shù)。

7.父節(jié)點(diǎn)和子節(jié)點(diǎn):被分為子節(jié)點(diǎn)的節(jié)點(diǎn)稱為父節(jié)點(diǎn),就像子節(jié)點(diǎn)是父節(jié)點(diǎn)的孩子。

這些是常用的決策樹(shù)。正如我們所知,每個(gè)算法都有優(yōu)點(diǎn)和缺點(diǎn),下面是一個(gè)人應(yīng)該知道的重要因素。

優(yōu)勢(shì)

1.容易理解:決策樹(shù)輸出是很容易理解的,即便是在那些從屬于以非思辯背景的人。它不需要任何統(tǒng)計(jì)知識(shí)來(lái)閱讀和解釋它們。它的圖形表示非常直觀,用戶可以很容易地理解他們的假說(shuō)。

2.有用的數(shù)據(jù)探索:決策樹(shù)是用一種最快的方式來(lái)識(shí)別最重要的變量和兩個(gè)或兩個(gè)以上變量之間的關(guān)系。在決策樹(shù)的幫助下,我們可以創(chuàng)建新變量或有更好的能力來(lái)預(yù)測(cè)目標(biāo)變量的功能。您可以參考文章(技巧提高的力量回歸模型)這樣一個(gè)方法。它也可以用于數(shù)據(jù)探索階段。例如,我們正在研究一個(gè)問(wèn)題,在數(shù)以百計(jì)的變量信息中,決策樹(shù)將有助于識(shí)別最重要的變量。

3.較少的數(shù)據(jù)清洗要求: 相比其他建模技術(shù)它需要較少的數(shù)據(jù)清洗。它的公平程度不受異常值和缺失值的影響。

4.數(shù)據(jù)類型不是一個(gè)約束:它可以處理數(shù)值和分類變量。

5.非參數(shù)方法:決策樹(shù)被認(rèn)為是一種非參數(shù)方法。這意味著決策樹(shù)沒(méi)有假設(shè)空間分布和分類器結(jié)構(gòu)。

缺點(diǎn)

1.過(guò)擬合: 過(guò)擬合決策樹(shù)模型最現(xiàn)實(shí)的困難。這個(gè)問(wèn)題只能通過(guò)設(shè)置約束模型參數(shù)和修剪來(lái)解決 (在下面詳細(xì)討論)。

2.不適合連續(xù)變量:在處理連續(xù)數(shù)值變量時(shí),決策樹(shù)在對(duì)不同類別變量進(jìn)行分類時(shí)失去信息。


2.回歸樹(shù)vs分類樹(shù)

我們都知道,終端節(jié)點(diǎn)(或樹(shù)葉)位于決策樹(shù)的底部。這意味著我們通常會(huì)顛倒繪制決策樹(shù),即葉子在底部根在頂部(如下所示)。

這些模型的功能幾乎相似,讓我們看看回歸樹(shù)和分類樹(shù)主要的差異和相似點(diǎn):

①用于回歸樹(shù)的因變量是連續(xù)的,而用于分類樹(shù)的因變量是無(wú)條件的。

②在回歸樹(shù)中,訓(xùn)練數(shù)據(jù)中的終端節(jié)點(diǎn)的價(jià)值獲取是觀測(cè)值落在該區(qū)域的平均響應(yīng)。因此,如果一個(gè)看不見(jiàn)的數(shù)據(jù)觀察落在那個(gè)區(qū)域,我們將它估算為平均值。

③在分類樹(shù)中, 訓(xùn)練數(shù)據(jù)中終端節(jié)點(diǎn)獲得的價(jià)值是觀測(cè)值落在該區(qū)域的模式。因此,如果一個(gè)看不見(jiàn)的數(shù)據(jù)落在該地區(qū),我們會(huì)使用眾數(shù)值作為其預(yù)測(cè)值。

④這兩個(gè)樹(shù)將預(yù)測(cè)空間(獨(dú)立變量)劃分為明顯的非重疊區(qū)域。為了簡(jiǎn)單起見(jiàn),你可以認(rèn)為這些區(qū)域是高維盒子或箱子。

⑤這兩種樹(shù)模型都遵循的自上而下的貪婪的方法稱為遞歸二分分裂。我們之所以叫它為“自上而下”,是因?yàn)楫?dāng)所有的觀察值都在單個(gè)區(qū)域時(shí)它先從樹(shù)的頂端開(kāi)始,然后向下將預(yù)測(cè)空間分為兩個(gè)分支。它被稱為“貪婪”,是因?yàn)樵撍惴?尋找最佳變量可用)關(guān)心的只有目前的分裂,而不是構(gòu)建一個(gè)更好的樹(shù)的未來(lái)的分裂。

⑥這個(gè)分裂的過(guò)程一直持續(xù)到達(dá)到一個(gè)用戶定義的停止標(biāo)準(zhǔn)。例如:我們可以告訴該算法一旦觀察每個(gè)節(jié)點(diǎn)的數(shù)量少于50就停止。

⑦在這兩種情況下,分裂過(guò)程達(dá)到停止標(biāo)準(zhǔn)后就會(huì)構(gòu)建出一個(gè)成年樹(shù)。但是,成年樹(shù)可能會(huì)過(guò)度適應(yīng)數(shù)據(jù),導(dǎo)致對(duì)未知數(shù)據(jù)的低準(zhǔn)確性。這就帶來(lái)了“修剪”。修剪是一個(gè)解決過(guò)度擬合的技術(shù)。我們會(huì)在以下部分了解更多關(guān)于它的內(nèi)容。


3.樹(shù)模型是如何決定在哪分裂的?

制造戰(zhàn)略性的分裂決定將嚴(yán)重影響樹(shù)的準(zhǔn)確性。分類樹(shù)和回歸樹(shù)的決策標(biāo)準(zhǔn)是不同的。

決策樹(shù)算法使用多個(gè)算法決策將一個(gè)節(jié)點(diǎn)分裂成兩個(gè)或兩個(gè)以上的子節(jié)點(diǎn)。子節(jié)點(diǎn)的創(chuàng)建增加了合成子節(jié)點(diǎn)的同質(zhì)性。換句話說(shuō),我們可以說(shuō)節(jié)點(diǎn)的純度隨著對(duì)目標(biāo)變量得尊重而增加。決策樹(shù)在所有可用的變量上分裂節(jié)點(diǎn),然后選擇產(chǎn)生最均勻的子節(jié)點(diǎn)的分裂。

算法的選擇也要基于目標(biāo)變量的類型。讓我們來(lái)看看這四個(gè)最常用的決策樹(shù)算法:

基尼系數(shù)

基尼系數(shù)表示,如果總量是純粹的,我們從總量中隨機(jī)選擇兩項(xiàng),那么這兩項(xiàng)必須是同一級(jí)別的,而且概率為1。

①它影響著無(wú)條件的分類目標(biāo)變量的“成功”或“失敗”。

②它只執(zhí)行二進(jìn)制分裂。

③基尼值越高同質(zhì)性越高。

④CART (分類樹(shù)和回歸樹(shù))使用基尼系數(shù)方法創(chuàng)建二進(jìn)制分裂。

通過(guò)計(jì)算尼基系數(shù)來(lái)產(chǎn)生分裂的步驟:

①計(jì)算子節(jié)點(diǎn)的尼基系數(shù),使用公式計(jì)算成功和失敗的概率的平方和 (p ^ 2 + ^ 2)。

②使用加權(quán)尼基系數(shù)計(jì)算每個(gè)節(jié)點(diǎn)的分裂。

例子:參照上面使用的例子,我們要基于目標(biāo)變量(或不玩板球)隔離學(xué)生。在下面的快照中,我們使用了性別和班級(jí)兩個(gè)輸入變量。現(xiàn)在,我想使用基尼系數(shù)確定哪些分裂產(chǎn)生了更均勻的子節(jié)點(diǎn)。

性別節(jié)點(diǎn):

①計(jì)算,女性子節(jié)點(diǎn)的基尼=(0.2)*(0.2)+(0.8)*(0.8)= 0.68

②男性子節(jié)點(diǎn)的基尼=(0.65)*(0.65)+(0.35)*(0.35)= 0.55

③為性別節(jié)點(diǎn)計(jì)算加權(quán)基尼=(10/30)* 0.68 +(20/30)* 0.55 = 0.59

班級(jí)節(jié)點(diǎn)的相似性:

①IX子節(jié)點(diǎn)的基尼=(0.43)*(0.43)+(0.57)*(0.57)= 0.51

②X子節(jié)點(diǎn)的基尼=(0.56)*(0.56)+(0.44)*(0.44)= 0.51

③計(jì)算班級(jí)節(jié)點(diǎn)的加權(quán)基尼=(14/30)* 0.51 +(16/30)* 0.51 = 0.51

以上,你可以看到基尼得分在性別上高于班級(jí),因此,節(jié)點(diǎn)分裂將取于性別。

l卡方

這是一個(gè)用來(lái)找出子節(jié)點(diǎn)和父節(jié)點(diǎn)之間差異的統(tǒng)計(jì)學(xué)意義的算法。我們測(cè)量它的方法是,計(jì)算觀察和期望頻率與目標(biāo)變量之間標(biāo)準(zhǔn)差的平方和。

①它影響到無(wú)條件分類目標(biāo)變量的“成功”或“失敗”。

②它可以執(zhí)行兩個(gè)或更多的分裂。

③卡方值越高,子節(jié)點(diǎn)和父節(jié)點(diǎn)之間差異的統(tǒng)計(jì)學(xué)顯著性越明顯。

④每個(gè)節(jié)點(diǎn)的卡方檢驗(yàn)都是使用公式計(jì)算。

⑤卡方=((實(shí)際-預(yù)期)^ 2 /預(yù)期)^ 1/2

⑥它生成樹(shù)稱為CHAID(卡方自動(dòng)交互檢測(cè)器)

卡方計(jì)算節(jié)點(diǎn)分裂的步驟:

①通過(guò)計(jì)算成功與失敗的偏差為單個(gè)節(jié)點(diǎn)計(jì)算卡方。

②通過(guò)計(jì)算每個(gè)節(jié)點(diǎn)成功和失敗的卡方和來(lái)計(jì)算卡方分割點(diǎn)。

例子:讓我們使用上面用來(lái)計(jì)算基尼系數(shù)的例子。

性別節(jié)點(diǎn):

①首先我們填充女性節(jié)點(diǎn),填充的實(shí)際內(nèi)容為“打板球”和“不打板球”,這些分別為2和8。

②計(jì)算期望值“打板球”和“不打板球”,這對(duì)雙方而言都是5,因?yàn)楦腹?jié)點(diǎn)有相同的50%的概率,我們應(yīng)用相同的概率在女性計(jì)數(shù)上(10)。

③通過(guò)使用公式計(jì)算偏差,實(shí)際—預(yù)期。實(shí)際上就是“打板球”(2 – 5 = -3),“不打板球”(8 – 5 = 3)。

④計(jì)算卡方節(jié)點(diǎn)的“打板球”和“不打板球”的公式=((實(shí)際-預(yù)期)^ 2 /預(yù)期)^ 1/2。您可以參考下表計(jì)算。

⑤遵循同樣的步驟計(jì)算男性節(jié)點(diǎn)卡方值。

⑥現(xiàn)在添加所有卡方值來(lái)計(jì)算卡方性別分裂點(diǎn)。

班級(jí)節(jié)點(diǎn):

執(zhí)行以上類似的步驟來(lái)計(jì)算班級(jí)分裂點(diǎn),你就會(huì)得出下面的表。

以上,你也可以看到,卡方識(shí)別性別分裂比班級(jí)更重要。

l信息增益

看看下面的圖片,你認(rèn)為哪個(gè)節(jié)點(diǎn)容易描述。我相信你的答案是C,因?yàn)樗枰俚男畔?所有的值是相似的。另一方面,B需要更多的信息來(lái)描述它,A需要最大的信息。換句話說(shuō),我們可以說(shuō),C是一個(gè)純粹的節(jié)點(diǎn),B是較不純粹的,而A是最不純粹的。

現(xiàn)在,我們可以提出一個(gè)結(jié)論:較不純粹的節(jié)點(diǎn)需要更少的信息來(lái)描述它,而純粹度越高需要的信息越多。定義這一個(gè)系統(tǒng)的無(wú)序程度的信息理論稱為熵。如果樣品完全均勻,那么熵為0,如果樣品是同等劃分(50% – 50%),那么它的熵為1 。

熵可以使用公式計(jì)算:

這里的p和q分別為成功和失敗的概率節(jié)點(diǎn)。熵也用于分類目標(biāo)變量。選擇相比父節(jié)點(diǎn)和其他節(jié)點(diǎn)分裂最低的熵。熵越小越好。

計(jì)算熵分割的步驟:

①計(jì)算父節(jié)點(diǎn)的熵。

②計(jì)算每個(gè)獨(dú)立節(jié)點(diǎn)分割的熵,并計(jì)算分裂中所有子節(jié)點(diǎn)得加權(quán)平均值。

例子:我們用這種方法來(lái)為學(xué)生例子確定最佳分割點(diǎn)。

①父節(jié)點(diǎn)的熵= – (15/30)log2(15/30)-(15/30)log2(15/30)= 1。1表示這是一個(gè)不純潔的節(jié)點(diǎn)。

②女性節(jié)點(diǎn)的熵= -(2/10)log2(2/10)-(8/10)log2(8/10)= 0.72和男性節(jié)點(diǎn),-(13/20)log2(13/20)(7/20)log2(7/20)= 0.93

③子節(jié)點(diǎn)性別分割的熵=加權(quán)熵=(10/30)* 0.72 +(20/30)* 0.72 = 0.86

④IX班級(jí)子節(jié)點(diǎn)的熵,-(6/14)log2(6/14)(8/14)log2(8/14)= 0.99 X班級(jí)子節(jié)點(diǎn),-(9/16)log2(9/16)(7/16)log2(7/16)= 0.99。

⑤班級(jí)分割的熵=(14/30)* 0.99 +(16/30)* 0.99 = 0.99

以上,你可以看到性別分裂的熵在所有之中是最低的,所以這個(gè)樹(shù)模型將在性別上分裂。我們可以得出信息熵作為1 -熵。

l減少方差

到現(xiàn)在,我們已經(jīng)討論了分類目標(biāo)變量的算法。減少方差算法用于連續(xù)目標(biāo)變量(回歸問(wèn)題)。該算法使用標(biāo)準(zhǔn)方差公式選擇最佳分裂。選擇方差較低的分裂作為總量分裂的標(biāo)準(zhǔn):

以上X指的是值,X是實(shí)際得值,n是值的數(shù)量。

方差的計(jì)算方法:

①為每個(gè)節(jié)點(diǎn)計(jì)算方差。

②為每個(gè)節(jié)點(diǎn)方差做加權(quán)平均。

例子:——讓我們分配數(shù)值1為打板球和0為不玩板球?,F(xiàn)在按以下步驟確定正確的分割:

①方差為根節(jié)點(diǎn),這意味著值是(15 * 1 + 15 * 0)/ 30 = 0.5,我們有15個(gè) 1和15個(gè) 0?,F(xiàn)在方差是((1 – 0.5)^ 2 +(1 – 0.5)^ 2 +…。+ 15倍(0 – 0.5)^ 2 +(0 – 0.5)^ 2 +…)/ 30的15倍,這可以寫成(15 *(1 – 0.5)^ 2 + 15 *(0 – 0.5)^ 2)/ 30 = 0.25

②女性節(jié)點(diǎn)的平均值=(2 * 1 + 8 * 0)/ 10 = 0.2和方差=(2 *(1 – 0.2)^ 2 + 8 *(0 – 0.2)^ 2)/ 10 = 0.16

③男性節(jié)點(diǎn)的平均值=(13 * 1 + 7 * 0)/ 20 = 0.65,方差=(13 *(1 – 0.65)^ 2 + 7 *(0 – 0.65)^ 2)/ 20 = 0.23

④分割性別的方差=子節(jié)點(diǎn)的加權(quán)方差=(10/30)* 0.16 +(20/30)* 0.16 = 0.21

⑤IX班級(jí)節(jié)點(diǎn)的平均值=(6 * 1 + 8 * 0)/ 14 = 0.43,方差=(6 *(1 – 0.43)^ 2 + 8 *(0 – 0.43)^ 2)/ 14 = 0.24

⑥X班級(jí)節(jié)點(diǎn)的平均值=(9 * 1 + 7 * 0)/ 16 = 0.56和方差=(9 *(1 – 0.56)^ 2 + 7 *(0 – 0.56)^ 2)/ 16 = 0.25

⑦分割性別的方差=(14/30)* 0.24 +(16/30)* 0.25 = 0.25

以上,你可以看到性別分割方差比父節(jié)點(diǎn)低,所以分割會(huì)發(fā)生在性別變量。

到這里,我們就學(xué)會(huì)了基本的決策樹(shù)和選擇最好的分裂建立樹(shù)模型的決策過(guò)程。就像我說(shuō)的,決策樹(shù)可以應(yīng)用在回歸和分類問(wèn)題上。讓我們?cè)敿?xì)了解這些方面。


數(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ù)說(shuō)明請(qǐng)參見(jiàn):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); }