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

熱線電話:13121318867

登錄
首頁精彩閱讀手中無y,心中有y——聚類算法的正確建模方式
手中無y,心中有y——聚類算法的正確建模方式
2021-12-10
收藏
手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

CDA數(shù)據(jù)分析師 出品

作者:CDA教研組

編輯:JYD

聚類算法是屬于無監(jiān)督機(jī)器學(xué)習(xí)方法;機(jī)器學(xué)習(xí)里把算法分為有監(jiān)督無監(jiān)督的算法,所謂有監(jiān)督,即我想研究的數(shù)據(jù)集有目標(biāo)數(shù)據(jù),白話點(diǎn)就是建模里大家常說的那個(gè)y,如我想基于公司數(shù)據(jù)庫已經(jīng)有的相關(guān)數(shù)據(jù)集訓(xùn)練一個(gè)模型,用來預(yù)測客戶是否會(huì)流失,從數(shù)據(jù)庫中得到的數(shù)據(jù)集里是有一個(gè)特征(一列)是客戶是否流失的,可能1代表流失,0代表不會(huì)流失;但業(yè)務(wù)的初期或者數(shù)據(jù)庫中沒有該特征,即手中無y,那該怎么辦?如對(duì)客戶進(jìn)行價(jià)值分群,此時(shí)對(duì)于這種目標(biāo)明確,但確實(shí)缺少y這一列這種分析需求,可考慮聚類算法來實(shí)現(xiàn)。

首先簡單闡述一下聚類算法的思想,其邏輯是計(jì)算觀測值之間的距離,然后根據(jù)距離來進(jìn)行分組(簇),目的是組內(nèi)之間的距離盡可能小,而組與組之間的距離大(即差異大)來達(dá)到分類(分組)的目的,得到的結(jié)果可以用來做數(shù)據(jù)挖掘。

回到我們的標(biāo)題,我們說聚類算法是無監(jiān)督機(jī)器學(xué)習(xí),沒有y,那怎么還說心中要有y呢?我們看下面的一個(gè)例子。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖1

如圖1給出一些彈珠,我們的需求是將這些不同差異的彈珠做聚類分析,可這些彈珠不同的差異太多了在不同的角度上,如果你心里沒有目的,是很難將這些彈珠做好聚類分群的。

如果我們的目的是根據(jù)彈珠的體積大小這個(gè)目的進(jìn)行分群的話,可能會(huì)聚成三類,即圖2里的大中小三種體積;

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖2

如果我們的需求是根據(jù)彈珠的透明程度,可能會(huì)分成圖3所示的2類:透明的一類和不透明的一類;

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖3

那如果我們的關(guān)注點(diǎn)是彈珠的顏色,可能會(huì)成為圖4所示的幾類,紅色系、黃色系、藍(lán)色系和紫色系等;

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖4

上面的例子我們可以看到,即使對(duì)于同一筆資料,根據(jù)需求的不同,聚類分群的結(jié)果也不太一樣,如果一個(gè)商業(yè)需求,分析師沒有目的或者會(huì)錯(cuò)需求的話,那挖掘出來的結(jié)果大概率是不會(huì)滿意的。

聚類算法要解決三個(gè)問題:

1.如何表示觀測值之間的相似性

2.如何根據(jù)這些相似性將類似的觀測值分到同一個(gè)類

3.對(duì)所有的觀測值分好類之后,如何對(duì)每一個(gè)類(群、組、簇這些說法都可)進(jìn)行特征描述

對(duì)于第一個(gè)問題,怎么計(jì)算觀測值之間的相似性呢,計(jì)算距離,常見的計(jì)算距離方法有曼哈頓距離、歐式距離。

圖5是曼哈頓距離的公式和演示

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖5

曼哈頓距離,即算直角距離,如圖5中object1和object2兩個(gè)觀測點(diǎn)的虛線(直角)距離就是曼哈頓距離,R是指相應(yīng)特征的范圍;圖6是一個(gè)計(jì)算的例子。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖6

兩個(gè)觀測值,分別有年紀(jì)和收入兩個(gè)維度,對(duì)其使用曼哈頓距離計(jì)算其距離為0.4。

下面要講的另外一種距離是歐式距離,歐式距離我們很早就接觸過,比如兩個(gè)點(diǎn)在二維坐標(biāo)軸上x(x1,x2)和y(y1,y2)他們的歐式距離平方就是(x1-y1)^2+(x2-y2)^2;

圖7是歐式距離的公式,歐式距離是Minkowski距離的一種推廣。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖7

這就是使用計(jì)算距離的公式來表示觀察與觀察之間的相似性。

那么第二個(gè)問題:如何根據(jù)這些相似性將類似的觀測值分到同一個(gè)類?這就是涉及到聚類的算法。

聚類算法根據(jù)樣本的不同處理會(huì)有很多種方法,這里會(huì)介紹層次聚類和基于劃分聚類里的kmeans聚類(該兩種聚類商業(yè)上經(jīng)常用)。

層次聚類,也有譯成系統(tǒng)聚類,指的是形成類相似度層次圖譜,便于直觀的確定類之間的劃分。該方法可以得到較理想的分類,但是難以處理大量樣本。

層次聚類的算法步驟是:

1.計(jì)算點(diǎn)與點(diǎn)之間的距離

2.將最近的兩個(gè)觀測點(diǎn)聚為一類,將其看做一個(gè)整體(類)計(jì)算與其他類之前的距離

3.一直重復(fù)上述過程,直至所有的觀測被聚為一類

如圖8是系統(tǒng)聚類的一個(gè)聚類過程演示:首先計(jì)算點(diǎn)與點(diǎn)之間的距離,如我們計(jì)算點(diǎn)1和點(diǎn)3之間的距離,發(fā)現(xiàn)其兩個(gè)點(diǎn)相對(duì)來說較近,我們把該兩個(gè)點(diǎn)化為一類叫類1,我們發(fā)現(xiàn)點(diǎn)2和點(diǎn)5距離第二近,所以也合并起來歸為一個(gè)類2,接著計(jì)算發(fā)現(xiàn),點(diǎn)4與點(diǎn)5較為近,但是點(diǎn)5已經(jīng)和點(diǎn)2合并了,所以呢點(diǎn)4、點(diǎn)2和點(diǎn)5合并成類3,接著點(diǎn)與點(diǎn)的距離矩陣告訴我們點(diǎn)1和點(diǎn)2的距離為第四近,但是點(diǎn)2、5、4已經(jīng)是類3了,點(diǎn)1也屬于類1,所以類1和類3合并成類4,類4再和點(diǎn)6合并為最后的類5。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖8

分層聚類到底分幾個(gè)類呢,往往是通過層次樹(樹形圖)來結(jié)合業(yè)務(wù)來決定的,圖9是上面演示聚類結(jié)果的層次樹。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖9

層次樹的x軸是觀測點(diǎn),y軸是距離,聚類分析的目的是組內(nèi)之間的距離小,組與組之間的距離盡可能大(差異明顯),從y軸畫一條平行于x軸的直線,如我在y軸0.1到0.15之間畫一條平行x軸的直線,與層次圖有4個(gè)交點(diǎn),意思是說分成了4個(gè)類(組),且這時(shí)組間距離是最大的(有4個(gè)交點(diǎn)的上平行線和下平行線之間的距離),1和3分成一組,2和5分成1組,4,6單獨(dú)一個(gè)組,這時(shí)算法角度給出的最優(yōu)分組,但是也要結(jié)合業(yè)務(wù)場景,比如算法角度給出分成20組組間差異最大,但是分成20個(gè)群進(jìn)行針對(duì)性營銷顯然大部分業(yè)務(wù)是不合適的。

我們剛才說,近的點(diǎn)劃分到一個(gè)類,那么怎么計(jì)算類與類之間的距離?如果把各觀測點(diǎn)圈在一個(gè)橢圓里的話,即怎么去計(jì)算兩個(gè)橢圓的距離?

計(jì)算類與類之間的距離方法也有很多,如平均鏈接法、重心法、Ward最小方差法;下面只介紹用的頻率高的Ward最小方差法。

所謂Ward最小方差法,是思想是使各個(gè)觀測之間的離差平方和最小。

圖10是該方法的計(jì)算公式,其特點(diǎn)是較少受到異常值的影響,適用范圍廣。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖10

圖11數(shù)據(jù)演示怎么計(jì)算各觀測之間的離差平方和

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖11

以上圖為例,一開始如果將AB合成一組,那么此時(shí)SS的值是

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

如果將CD合成一個(gè)組,其SS值是

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

當(dāng)合并成3組時(shí),如果是AB、CD和E的組合,那么SS的值是1+4+0=5,以同樣的計(jì)算方式,可以得到不同的分組情況和相應(yīng)的SS值,如下圖。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式
手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

我們找出SS值最小的分組,上圖看到分成4群即AB分成一類,C、D、E單獨(dú)一類離差平方和最?。?),分成3群時(shí)最小的SS值是3.5,其他情況下的分群數(shù)量最小SS值也可看出。

接下來我們講層次聚類的建模流程。

1. 針對(duì)業(yè)務(wù)需求,我們select到相關(guān)的數(shù)據(jù)集,通常要經(jīng)過處理才能進(jìn)行分析:

a) 缺失值

b) 異常值(極大或極?。?/span>

c) 分類變量需要轉(zhuǎn)化為啞變量(0/1數(shù)值)

d) 分類變量類別過多

當(dāng)然有些算法允許有缺失值、異常值等資料,如決策樹,但聚類不支持這些情況,所以要處理。

2.要做變量標(biāo)準(zhǔn)化

變量的量綱的不一樣引起計(jì)算距離的偏差,因此要統(tǒng)一,統(tǒng)一的方式有兩種方法:

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

3.不同維度的變量,相關(guān)性盡量低

圖12演示了大部分公司業(yè)務(wù)普遍性的變量分類模式,如圖12,將數(shù)據(jù)分成購買記錄數(shù)據(jù)(如消費(fèi)頻率、消費(fèi)的間隔周期等)、消費(fèi)習(xí)慣行為等數(shù)據(jù)(如消費(fèi)的區(qū)域)、第三方行為數(shù)據(jù)(如網(wǎng)絡(luò)瀏覽偏好等)。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖12

4.層次聚類演示和確定聚類數(shù)

層次聚類的一大優(yōu)點(diǎn)是可以結(jié)合聚類可視化來對(duì)聚類結(jié)果進(jìn)行業(yè)務(wù)上的理解和驗(yàn)證,圖13是幾個(gè)省份的經(jīng)濟(jì)數(shù)據(jù)聚類結(jié)果,肉眼觀察,如果你分成4的話,那上海、廣東是單獨(dú)一類,天津、廣西、福建、遼寧、河北是另外一類,浙江、江蘇、山東、是第四類,那么現(xiàn)在看看算法的聚類跟我看左圖的肉眼觀察是否一致,如果一致,那說明算法在解釋上也是很好的;

不過看右邊的樹形圖展示,其兩類是建議的,即福建、遼寧、河北、天津、廣西是一類,其他省份為另外一類,因?yàn)檫@樣劃分類與類之間的距離最長(差異最大),這里根據(jù)你的聚類觀察結(jié)合業(yè)務(wù)需求分成4類,或者根據(jù)算法的建議分成2類且能在商業(yè)情景下能夠得到解釋也可(這里根據(jù)當(dāng)時(shí)各省的情況,上海跟山東劃分一類應(yīng)該不合理的,上海是一線城市,這里分成4類合適點(diǎn))。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖13

值得一提的是層次分類可以得到較為理想的分類數(shù)量,但是難處理大量樣本數(shù)據(jù)。所以我們需要講另外一種聚類方法。

第二種要講的聚類是叫kmeans聚類,也就是我們常說的k均值聚類

Kmeans聚類的算法步驟:

1.選擇數(shù)據(jù),初始化中心點(diǎn)

2.將離中心點(diǎn)較近的點(diǎn)劃分到相應(yīng)的類

3.更新類的中心

4.重新將離數(shù)據(jù)近的點(diǎn)劃分到相應(yīng)的類

5.反復(fù)進(jìn)行上面3,4步驟,直到分類的結(jié)果不再變化

圖14是該算法一個(gè)簡單的演示。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖14

首先在我需要分類的數(shù)據(jù)上隨機(jī)選5個(gè)中心點(diǎn)(即K=5),然后計(jì)算觀測點(diǎn)與中心點(diǎn)的距離,劃分到相應(yīng)的中心點(diǎn)所屬的群里,接著不用第一次設(shè)置的中心點(diǎn),現(xiàn)在重新設(shè)置5個(gè)中心點(diǎn)的位置,繼續(xù)計(jì)算觀測點(diǎn)與現(xiàn)在中心點(diǎn)的位置,基于遠(yuǎn)近劃分到相應(yīng)的5個(gè)不同群中,反復(fù)重復(fù)這種設(shè)置中心點(diǎn),劃分?jǐn)?shù)據(jù)這種操作,直到數(shù)據(jù)的劃分情況不再發(fā)生變動(dòng)。

Kmeans聚類的建模流程同層次聚類一樣,即

1.預(yù)先處理變量的缺失值異常值

2.變量標(biāo)準(zhǔn)化

3.不同維度的變量,相關(guān)性盡量低

4.確定合適的分群個(gè)數(shù)

不過在K值選擇上主要推薦輪廓系數(shù)(Silhouette Coefficient),并結(jié)合以下注意事項(xiàng):

  • 分群結(jié)果的穩(wěn)定性
  • 重復(fù)多次分群,看結(jié)果是否穩(wěn)定
  • 分群結(jié)果是否有好解釋的商業(yè)意義

圖15是輪廓系數(shù)的公式

樣本輪廓系數(shù)

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

整體輪廓系數(shù)

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖15

其中a(i)表示觀測i到同一類內(nèi)觀測點(diǎn)距離的均值,b(i)表示觀測點(diǎn)i到不同類內(nèi)所有點(diǎn)距離的均值的最小值,S(i)表示觀測i的輪廓系數(shù),若a(i)小于b(i)則說明該觀測點(diǎn)在聚類的類中是合理的,此時(shí)a(i)/b(i)的值趨向于0,那么S(i)越接近1,聚類的效果越好;若a(i)大于b(i),說明觀測點(diǎn)還不如在別的類中,聚類的效果不好,此時(shí)b(i)/a(i)的值趨向于0,從而S(i)趨向于-1,若a(i)=b(i),則不能判斷觀測點(diǎn)i在哪個(gè)類效果中較好,此時(shí)S(i)為0,S(i)的值域-1到1,其值越小表示聚類的效果越差,其值越大代表聚類效果好,將所以觀測點(diǎn)的輪廓系數(shù)值相加求均值,就可以得到整個(gè)已聚類數(shù)據(jù)集的輪廓系數(shù),同樣,衡量其聚類好壞的標(biāo)準(zhǔn)與單個(gè)觀測點(diǎn)的輪廓系數(shù)的衡量方式是一致的。

不過這里還需注意一下,Kmeans處理大量樣本聚類有優(yōu)勢(shì),但聚類的結(jié)果展示上不如層次聚類有好理解和可解釋性,所以使用kmeans聚類后,所做的聚類事后分析,往往要借助決策樹形圖來輔助理解。

5.聚類事后分析

聚類分好后需要拿來給營銷相關(guān)人員看,這就需要分類的結(jié)果可解釋性好:里面到底是怎么根據(jù)不同維度來將數(shù)據(jù)分群的,然后跟業(yè)務(wù)經(jīng)驗(yàn)得到驗(yàn)證;這里借助決策樹的可視化(決策樹圖)來實(shí)現(xiàn),我們知道決策樹有監(jiān)督的學(xué)習(xí)方法,這里的處理就是把上面聚類算法得到的類別看成目標(biāo)y,根據(jù)之前的各維度特征來使用決策樹算法。如圖16是一個(gè)先聚類后再用決策樹的一個(gè)可視化結(jié)果展示。

手中無y,心中有y——<a href='/map/julei/' style='color:#000;font-size:inherit;'>聚類</a>算法的正確建模方式

圖16

怎么看決策樹的可視化圖呢,從上到下,最上面的叫根節(jié)點(diǎn),其中value是一個(gè)含四個(gè)元素的列表,意思是分成4類,往下的剪頭叫拆分,直到不能再拆分的每個(gè)“矩形”叫葉子節(jié)點(diǎn),中間銜接的“矩形”叫決策節(jié)點(diǎn);

那怎么從決策樹形圖看出分類結(jié)果的好壞以及對(duì)每個(gè)群進(jìn)行描述達(dá)到可解釋的目的?

我們看value里是否其中一個(gè)元素的數(shù)值要遠(yuǎn)遠(yuǎn)大于其他的,如在第三層,value=18750遠(yuǎn)遠(yuǎn)大于47,1060,29,意思是說有18750個(gè)點(diǎn)被劃分到了class為2的類里,這一層其他class類的劃分情況也是很“干凈”的,所以決策樹在第三層的時(shí)候(劃分4類)分類效果就很好了;

那么怎么解讀呢,比如class2的用戶群特點(diǎn)是:不用柜臺(tái)(TBM<-0.07)、也不用ATM POS機(jī)(ATM POS<=-0.374),那么顯然這類客戶什么都不用,說明在該銀行業(yè)務(wù)當(dāng)中,class2這類群體是流失客戶,再看看class0這類群體特征:不用柜臺(tái),但是用POS機(jī),很可能是這些喜歡方便,取款金額頻繁,取款金融少等這些特點(diǎn)的人群,其他兩個(gè)類同樣可以根據(jù)這種樹形圖來解釋。

回答第三個(gè)問題,對(duì)所有的觀測值分好類之后,如何對(duì)每一個(gè)類進(jìn)行特征描述?

聚類的結(jié)果要詳細(xì)的作描述性統(tǒng)計(jì),甚至作抽樣的客戶訪談,以了解客戶的真實(shí)情況,因此讓業(yè)務(wù)人員滿足客戶管理的目標(biāo),是聚類的終極目的。

上述建模流程是聚類的一般性流程,其實(shí)就應(yīng)用角度來說,快速聚類兩種運(yùn)用場景是:

1. 發(fā)現(xiàn)異常情況:如果不對(duì)數(shù)據(jù)進(jìn)行任何形式的轉(zhuǎn)換,只是經(jīng)過中心標(biāo)準(zhǔn)化或級(jí)差標(biāo)準(zhǔn)化就進(jìn)行快速聚類,會(huì)根據(jù)數(shù)據(jù)分布特征得到聚類結(jié)果。這種聚類會(huì)將極端數(shù)據(jù)聚為幾類。這種方法適用于統(tǒng)計(jì)分析之前的異常值剔除,對(duì)異常行為的挖掘,比如監(jiān)控銀行賬戶是否有洗錢行為、監(jiān)控POS機(jī)是有從事套現(xiàn)、監(jiān)控某個(gè)終端是否是電話卡養(yǎng)卡客戶等等。

2. 將個(gè)案數(shù)據(jù)做劃分:出于客戶細(xì)分目的的聚類分析一般希望聚類結(jié)果為大致平均的幾大類,因此需要將數(shù)據(jù)進(jìn)行轉(zhuǎn)換,這種方法適用場景包括客戶消費(fèi)行為聚類、客戶積分使用行為聚類等等。

文章的最后,我們?cè)賮砜偨Y(jié)一下本文的內(nèi)容,就算法角度,講了層次聚類和kmeans聚類,就建模層面來說,通常的流程是:變量歸一化=>分布轉(zhuǎn)換=>主成分=>聚類,歸一化我們是希望剔除掉不同量綱,范圍的影響(因?yàn)橐?jì)算距離),而分布轉(zhuǎn)換這個(gè)步驟是因?yàn)槲覀兿M麑⒖蛻艟鶆虻姆譃槿舾深?,在變量上,我們希望不同維度下的變量,相關(guān)性程度較低,對(duì)于多維的數(shù)據(jù)集來說,可以使用主成分分析來將變量進(jìn)行降維;而使用聚類算法得到分群數(shù)量需要進(jìn)行事后分析,來跟業(yè)務(wù)經(jīng)驗(yàn)進(jìn)行驗(yàn)證,達(dá)到可解釋且可進(jìn)行客戶畫像的目的。

如果應(yīng)用需求是發(fā)現(xiàn)異常情況下的聚類,其流程為變量歸一化=>主成分=>聚類,因?yàn)檫@種需求會(huì)根據(jù)數(shù)據(jù)分布特征得到聚類結(jié)果,未分布轉(zhuǎn)換情況下,這種聚類會(huì)將極端數(shù)據(jù)聚為幾類,從而幫助我們對(duì)異常行為進(jì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)檢測極驗(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); }