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

熱線電話:13121318867

登錄
首頁精彩閱讀機器學(xué)習(xí)基礎(chǔ)與實踐之?dāng)?shù)據(jù)清洗!
機器學(xué)習(xí)基礎(chǔ)與實踐之?dāng)?shù)據(jù)清洗!
2016-07-04
收藏
想寫這個系列很久了,最近剛好項目結(jié)束了閑下來有點時間,于是決定把之前學(xué)過的東西做個總結(jié)。之前看過一些機器學(xué)習(xí)方面的書,每本書都各有側(cè)重點,機器學(xué)習(xí)實戰(zhàn)和集體智慧編程更偏向與實戰(zhàn),側(cè)重于對每個算法的實際操作過程,但是沒有對整個數(shù)據(jù)挖掘項目做介紹,李航老師的統(tǒng)計學(xué)習(xí)方法和周志華老師的機器學(xué)習(xí)這兩本書側(cè)重對原理的講解和公式的推導(dǎo),但是實戰(zhàn)方面可能會少一點。

我結(jié)合之前看過的書,以及自己的一些項目經(jīng)驗做了一些總結(jié),一是回顧自己還有哪些遺漏,二是希望給新入門的同學(xué)一個參考。至于編程語言,主要用python,也會有少部分R,java和scala之類,畢竟實際項目中也不可能使用一種語言。此外,本系列所用到的所有數(shù)據(jù)我會傳到Github上,需要的同學(xué)可以自行下載。為保證文章質(zhì)量,每周二周四更新,下面是主要的目錄(可能會根據(jù)實際情況調(diào)整):

第一部分 模型的評估與數(shù)據(jù)處理

機器學(xué)習(xí)基礎(chǔ)與實踐(一)----數(shù)據(jù)清洗
機器學(xué)習(xí)基礎(chǔ)與實踐(二)----數(shù)據(jù)轉(zhuǎn)換
機器學(xué)習(xí)基礎(chǔ)與實踐(三)----數(shù)據(jù)降維

第二部分 特征工程

機器學(xué)習(xí)基礎(chǔ)與實踐(四)----特征選擇
機器學(xué)習(xí)基礎(chǔ)與實踐(五)----特征提取
機器學(xué)習(xí)基礎(chǔ)與實踐(六)----模型選擇與評估

第三部分 算法基礎(chǔ)之有監(jiān)督算法

機器學(xué)習(xí)基礎(chǔ)與實踐(七)----廣義線性模型
機器學(xué)習(xí)基礎(chǔ)與實踐(八)----最小二乘
機器學(xué)習(xí)基礎(chǔ)與實踐(九)----LDA
機器學(xué)習(xí)基礎(chǔ)與實踐(十)----SGD
機器學(xué)習(xí)基礎(chǔ)與實踐(十一)----K近鄰
機器學(xué)習(xí)基礎(chǔ)與實踐(十二)----高斯過程
機器學(xué)習(xí)基礎(chǔ)與實踐(十三)----決策樹(ID3,C4.5,C5.0,CART)
機器學(xué)習(xí)基礎(chǔ)與實踐(十四)----樸素貝葉斯
機器學(xué)習(xí)基礎(chǔ)與實踐(十五)----支持向量機
機器學(xué)習(xí)基礎(chǔ)與實踐(十六)----集成學(xué)習(xí)(Bagging,RF,AdaBoost,Gradient Tree Boosting,Voting Classifier)
機器學(xué)習(xí)基礎(chǔ)與實踐(十七)----感知機模型
機器學(xué)習(xí)基礎(chǔ)與實踐(十八)----多分類算法

第四部分 算法基礎(chǔ)之無監(jiān)督算法

機器學(xué)習(xí)基礎(chǔ)與實踐(十九)----K-means
機器學(xué)習(xí)基礎(chǔ)與實踐(二十)----Affinity propagation
機器學(xué)習(xí)基礎(chǔ)與實踐(二十一)----Mean-shift
機器學(xué)習(xí)基礎(chǔ)與實踐(二十二)----Spectral clustering
機器學(xué)習(xí)基礎(chǔ)與實踐(二十三)----Ward hierachical
機器學(xué)習(xí)基礎(chǔ)與實踐(二十四)----Agglomerative clustering
機器學(xué)習(xí)基礎(chǔ)與實踐(二十五)----DBSCAN
機器學(xué)習(xí)基礎(chǔ)與實踐(二十六)----Gaussian mixtures
機器學(xué)習(xí)基礎(chǔ)與實踐(二十七)----Birch

第五部分 算法基礎(chǔ)之推薦算法

機器學(xué)習(xí)基礎(chǔ)與實踐(二十八)----相似度計算
機器學(xué)習(xí)基礎(chǔ)與實踐(二十九)----Arules關(guān)聯(lián)規(guī)則
機器學(xué)習(xí)基礎(chǔ)與實踐(三十)----Fp-Growth
機器學(xué)習(xí)基礎(chǔ)與實踐(三十一)----User-based or Item-based

第六部分 算法基礎(chǔ)之半監(jiān)督模型

機器學(xué)習(xí)基礎(chǔ)與實踐(三十二)----Label Propagation

第七部分 算法基礎(chǔ)之其他模型

機器學(xué)習(xí)基礎(chǔ)與實踐(三十三)----概率圖模型
機器學(xué)習(xí)基礎(chǔ)與實踐(三十四)----最大熵模型
機器學(xué)習(xí)基礎(chǔ)與實踐(三十五)----規(guī)則學(xué)習(xí)
機器學(xué)習(xí)基礎(chǔ)與實踐(三十六)----強化學(xué)習(xí)
機器學(xué)習(xí)基礎(chǔ)與實踐(三十七)----條件隨機場
機器學(xué)習(xí)基礎(chǔ)與實踐(三十八)----保序回歸(Isotonic regression)
機器學(xué)習(xí)基礎(chǔ)與實踐(三十九)----Probability calibration

正文

按照我做項目的經(jīng)驗,來了項目,首先是分析項目的目的和需求,了解這個項目屬于什么問題,要達到什么效果。然后提取數(shù)據(jù),做基本的數(shù)據(jù)清洗。第三步是特征工程,這個屬于臟活累活,需要耗費很大的精力,如果特征工程做的好,那么,后面選擇什么算法其實差異不大,反之,不管選擇什么算法,效果都不會有突破性的提高。

第四步,是跑算法,通常情況下,我會把所有能跑的算法先跑一遍,看看效果,分析一下precesion/recall和f1-score,看看有沒有什么異常(譬如有好幾個算法precision特別好,但是recall特別低,這就要從數(shù)據(jù)中找原因,或者從算法中看是不是因為算法不適合這個數(shù)據(jù)),如果沒有異常,那么就進行下一步,選擇一兩個跑的結(jié)果最好的算法進行調(diào)優(yōu)。

調(diào)優(yōu)的方法很多,調(diào)整參數(shù)的話可以用網(wǎng)格搜索、隨機搜索等,調(diào)整性能的話,可以根據(jù)具體的數(shù)據(jù)和場景進行具體分析。調(diào)優(yōu)后再跑一邊算法,看結(jié)果有沒有提高,如果沒有,找原因,數(shù)據(jù) or 算法?是數(shù)據(jù)質(zhì)量不好,還是特征問題還是算法問題。一個一個排查,找解決方法。特征問題就回到第三步再進行特征工程,數(shù)據(jù)質(zhì)量問題就回到第一步看數(shù)據(jù)清洗有沒有遺漏,異常值是否影響了算法的結(jié)果,算法問題就回到第四步,看算法流程中哪一步出了問題。

如果實在不行,可以搜一下相關(guān)的論文,看看論文中有沒有解決方法。這樣反復(fù)來幾遍,就可以出結(jié)果了,寫技術(shù)文檔和分析報告,再向業(yè)務(wù)人員或產(chǎn)品講解我們做的東西,然后他們再提建議/該需求,不斷循環(huán),最后代碼上線,改bug,直到結(jié)項。

直觀來看,可以用一個流程圖來表示:


今天講數(shù)據(jù)清洗,為什么要進行數(shù)據(jù)清洗呢?我們在書上看到的數(shù)據(jù),譬如常見的iris數(shù)據(jù)集,房價數(shù)據(jù),電影評分?jǐn)?shù)據(jù)集等等,數(shù)據(jù)質(zhì)量都很高,沒有缺失值,沒有異常點,也沒有噪音,而在真實數(shù)據(jù)中,我們拿到的數(shù)據(jù)可能包含了大量的缺失值,可能包含大量的噪音,也可能因為人工錄入錯誤導(dǎo)致有異常點存在,對我們挖據(jù)出有效信息造成了一定的困擾,所以我們需要通過一些方法,盡量提高數(shù)據(jù)的質(zhì)量。數(shù)據(jù)清洗一般包括以下幾個步驟:

一.分析數(shù)據(jù)
二.缺失值處理
三.異常值處理
四.去重處理
五.噪音數(shù)據(jù)處理
六.一些實用的數(shù)據(jù)處理小工具

一.分析數(shù)據(jù)

在實際項目中,當(dāng)我們確定需求后就會去找相應(yīng)的數(shù)據(jù),拿到數(shù)據(jù)后,首先要對數(shù)據(jù)進行描述性統(tǒng)計分析,查看哪些數(shù)據(jù)是不合理的,也可以知道數(shù)據(jù)的基本情況。如果是銷售額數(shù)據(jù)可以通過分析不同商品的銷售總額、人均消費額、人均消費次數(shù)等,同一商品的不同時間的消費額、消費頻次等等,了解數(shù)據(jù)的基本情況。此外可以通過作圖的方式了解數(shù)據(jù)的質(zhì)量,有無異常點,有無噪音等。舉個例子(這里數(shù)據(jù)較少,就直接用R作圖了):




從上面四幅圖可以很清楚的看出,180是異常值,即第23個數(shù)據(jù)需要清理。

python中也包含了大量的統(tǒng)計命令,其中主要的統(tǒng)計特征函數(shù)如下圖所示:



二.缺失值處理

缺失值在實際數(shù)據(jù)中是不可避免的問題,有的人看到有缺失的數(shù)據(jù)就直接刪除了,有的人直接賦予0值或者某一個特殊的值,那么到底該怎么處理呢?對于不同的數(shù)據(jù)場景應(yīng)該采取不同的策略,首先應(yīng)該判斷缺失值的分布情況:



數(shù)據(jù)情況如下:


可以看到,第2列已經(jīng)出現(xiàn)了缺失值,現(xiàn)在我們來看一下缺失值的數(shù)量:



在743個數(shù)據(jù)里只有8個數(shù)據(jù)缺失,所以刪除它們對于整體數(shù)據(jù)情況影響不大。當(dāng)然,這是缺失值少的情況下,在缺失值值比較多,而這個維度的信息還很重要的時候(因為缺失值如果占了95%以上,可以直接去掉這個維度的數(shù)據(jù)了),直接刪除會對后面的算法跑的結(jié)果造成不好的影響。我們常用的方法有以下幾種:

1.直接刪除----適合缺失值數(shù)量較小,并且是隨機出現(xiàn)的,刪除它們對整體數(shù)據(jù)影響不大的情況

2.使用一個全局常量填充---譬如將缺失值用“Unknown”等填充,但是效果不一定好,因為算法可能會把它識別為一個新的類別,一般很少用

3.使用均值或中位數(shù)代替----優(yōu)點:不會減少樣本信息,處理簡單。缺點:當(dāng)缺失數(shù)據(jù)不是隨機數(shù)據(jù)時會產(chǎn)生偏差.對于正常分布的數(shù)據(jù)可以使用均值代替,如果數(shù)據(jù)是傾斜的,使用中位數(shù)可能更好。

4.插補法

1)隨機插補法----從總體中隨機抽取某個樣本代替缺失樣本

2)多重插補法----通過變量之間的關(guān)系對缺失數(shù)據(jù)進行預(yù)測,利用蒙特卡洛方法生成多個完整的數(shù)據(jù)集,在對這些數(shù)據(jù)集進行分析,最后對分析結(jié)果進行匯總處理

3)熱平臺插補----指在非缺失數(shù)據(jù)集中找到一個與缺失值所在樣本相似的樣本(匹配樣本),利用其中的觀測值對缺失值進行插補。

優(yōu)點:簡單易行,準(zhǔn)去率較高

缺點:變量數(shù)量較多時,通常很難找到與需要插補樣本完全相同的樣本。但我們可以按照某些變量將數(shù)據(jù)分層,在層中對缺失值實用均值插補

4)拉格朗日差值法和牛頓插值法(簡單高效,數(shù)值分析里的內(nèi)容,數(shù)學(xué)公式以后再補 = =)

5.建模法

可以用回歸、使用貝葉斯形式化方法的基于推理的工具或決策樹歸納確定。例如,利用數(shù)據(jù)集中其他數(shù)據(jù)的屬性,可以構(gòu)造一棵判定樹,來預(yù)測缺失值的值。

以上方法各有優(yōu)缺點,具體情況要根據(jù)實際數(shù)據(jù)分分布情況、傾斜程度、缺失值所占比例等等來選擇方法。一般而言,建模法是比較常用的方法,它根據(jù)已有的值來預(yù)測缺失值,準(zhǔn)確率更高。

三.異常值處理

異常值我們通常也稱為“離群點”。在講分析數(shù)據(jù)時,我們舉了個例子說明如何發(fā)現(xiàn)離群點,除了畫圖(畫圖其實并不常用,因為數(shù)據(jù)量多時不好畫圖,而且慢),還有很多其他方法:

1.簡單的統(tǒng)計分析

拿到數(shù)據(jù)后可以對數(shù)據(jù)進行一個簡單的描述性統(tǒng)計分析,譬如最大最小值可以用來判斷這個變量的取值是否超過了合理的范圍,如客戶的年齡為-20歲或200歲,顯然是不合常理的,為異常值。

python中可以直接用pandas的describe():



2.3?原則

如果數(shù)據(jù)服從正態(tài)分布,在3?原則下,異常值為一組測定值中與平均值的偏差超過3倍標(biāo)準(zhǔn)差的值。如果數(shù)據(jù)服從正態(tài)分布,距離平均值3?之外的值出現(xiàn)的概率為P(|x-u| > 3?) <= 0.003,屬于極個別的小概率事件。如果數(shù)據(jù)不服從正態(tài)分布,也可以用遠(yuǎn)離平均值的多少倍標(biāo)準(zhǔn)差來描述。

3.箱型圖分析

箱型圖提供了識別異常值的一個標(biāo)準(zhǔn):如果一個值小于QL01.5IQR或大于OU-1.5IQR的值,則被稱為異常值。QL為下四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它??;QU為上四分位數(shù),表示全部觀察值中有四分之一的數(shù)據(jù)取值比它大;IQR為四分位數(shù)間距,是上四分位數(shù)QU與下四分位數(shù)QL的差值,包含了全部觀察值的一半。箱型圖判斷異常值的方法以四分位數(shù)和四分位距為基礎(chǔ),四分位數(shù)具有魯棒性:25%的數(shù)據(jù)可以變得任意遠(yuǎn)并且不會干擾四分位數(shù),所以異常值不能對這個標(biāo)準(zhǔn)施加影響。因此箱型圖識別異常值比較客觀,在識別異常值時有一定的優(yōu)越性。

4.基于模型檢測

首先建立一個數(shù)據(jù)模型,異常是那些同模型不能完美擬合的對象;如果模型是簇的集合,則異常是不顯著屬于任何簇的對象;在使用回歸模型時,異常是相對遠(yuǎn)離預(yù)測值的對象

優(yōu)缺點:1.有堅實的統(tǒng)計學(xué)理論基礎(chǔ),當(dāng)存在充分的數(shù)據(jù)和所用的檢驗類型的知識時,這些檢驗可能非常有效;2.對于多元數(shù)據(jù),可用的選擇少一些,并且對于高維數(shù)據(jù),這些檢測可能性很差。

5.基于距離

通常可以在對象之間定義鄰近性度量,異常對象是那些遠(yuǎn)離其他對象的對象

優(yōu)缺點:1.簡單;2.缺點:基于鄰近度的方法需要O(m2)時間,大數(shù)據(jù)集不適用;3.該方法對參數(shù)的選擇也是敏感的;4.不能處理具有不同密度區(qū)域的數(shù)據(jù)集,因為它使用全局閾值,不能考慮這種密度的變化。

6.基于密度

當(dāng)一個點的局部密度顯著低于它的大部分近鄰時才將其分類為離群點。適合非均勻分布的數(shù)據(jù)。

優(yōu)缺點:1.給出了對象是離群點的定量度量,并且即使數(shù)據(jù)具有不同的區(qū)域也能夠很好的處理;2.與基于距離的方法一樣,這些方法必然具有O(m2)的時間復(fù)雜度。對于低維數(shù)據(jù)使用特定的數(shù)據(jù)結(jié)構(gòu)可以達到O(mlogm);3.參數(shù)選擇困難。雖然算法通過觀察不同的k值,取得最大離群點得分來處理該問題,但是,仍然需要選擇這些值的上下界。

7.基于聚類

基于聚類的離群點:一個對象是基于聚類的離群點,如果該對象不強屬于任何簇。離群點對初始聚類的影響:如果通過聚類檢測離群點,則由于離群點影響聚類,存在一個問題:結(jié)構(gòu)是否有效。為了處理該問題,可以使用如下方法:對象聚類,刪除離群點,對象再次聚類(這個不能保證產(chǎn)生最優(yōu)結(jié)果)。

優(yōu)缺點:1.基于線性和接近線性復(fù)雜度(k均值)的聚類技術(shù)來發(fā)現(xiàn)離群點可能是高度有效的;2.簇的定義通常是離群點的補,因此可能同時發(fā)現(xiàn)簇和離群點;3.產(chǎn)生的離群點集和它們的得分可能非常依賴所用的簇的個數(shù)和數(shù)據(jù)中離群點的存在性;4.聚類算法產(chǎn)生的簇的質(zhì)量對該算法產(chǎn)生的離群點的質(zhì)量影響非常大。

處理方法:

1)刪除異常值----明顯看出是異常且數(shù)量較少可以直接刪除

2)不處理---如果算法對異常值不敏感則可以不處理,但如果算法對異常值敏感,則最好不要用,如基于距離計算的一些算法,包括kmeans,knn之類的。

3)平均值替代----損失信息小,簡單高效。

4)視為缺失值----可以按照處理缺失值的方法來處理

四.去重處理

DataFrame數(shù)據(jù)格式為例:





如果數(shù)據(jù)是列表格式的,有以下幾種方法可以刪除:




五.噪音處理

噪音,是被測量變量的隨機誤差或方差。我們在上文中提到過異常點(離群點),那么離群點和噪音是不是一回事呢?我們知道,觀測量(Measurement) = 真實數(shù)據(jù)(True Data) + 噪聲 (Noise)。離群點(Outlier)屬于觀測量,既有可能是真實數(shù)據(jù)產(chǎn)生的,也有可能是噪聲帶來的,但是總的來說是和大部分觀測量之間有明顯不同的觀測值。噪音包括錯誤值或偏離期望的孤立點值,但也不能說噪聲點包含離群點,雖然大部分數(shù)據(jù)挖掘方法都將離群點視為噪聲或異常而丟棄。然而,在一些應(yīng)用(例如:欺詐檢測),會針對離群點做離群點分析或異常挖掘。而且有些點在局部是屬于離群點,但從全局看是正常的。

我在quora上看到過一個解釋噪音與離群點的有趣的例子:

Outlier: you are enumerating meticulously everything you have. You found 3 dimes, 1 quarter and wow a 100 USD bill you had put there last time you bought some booze and had totally forgot there. The 100 USD bill is an outlier, as it's not commonly expected in a pocket.

Noise: you have just come back from that club and are pretty much wasted. You try to find some money to buy something to sober up, but you have trouble reading the figures correctly on the coins. You found 3 dimes, 1 quarter and wow a 100 USD bill. But in fact, you have mistaken the quarter for a dime: this mistake introduces noise in the data you have access to.

To put it otherwise, data = true signal + noise. Outliers are part of the data.

翻譯過來就是:

離群點: 你正在從口袋的零錢包里面窮舉里面的錢,你發(fā)現(xiàn)了3個一角,1個五毛,和一張100元的毛爺爺向你微笑。這個100元就是個離群點,因為并不應(yīng)該常出現(xiàn)在口袋里..

噪聲: 你晚上去三里屯喝的酩酊大醉,很需要買點東西清醒清醒,這時候你開始翻口袋的零錢包,嘛,你發(fā)現(xiàn)了3個一角,1個五毛,和一張100元的毛爺爺向你微笑。但是你突然眼暈,把那三個一角看成了三個1元...這樣錯誤的判斷使得數(shù)據(jù)集中出現(xiàn)了噪聲

那么對于噪音我們應(yīng)該如何處理呢?有以下幾種方法:

1.分箱法

分箱方法通過考察數(shù)據(jù)的“近鄰”(即,周圍的值)來光滑有序數(shù)據(jù)值。這些有序的值被分布到一些“桶”或箱中。由于分箱方法考察近鄰的值,因此它進行局部光滑。

用箱均值光滑:箱中每一個值被箱中的平均值替換。

用箱中位數(shù)平滑:箱中的每一個值被箱中的中位數(shù)替換。

用箱邊界平滑:箱中的最大和最小值同樣被視為邊界。箱中的每一個值被最近的邊界值替換。

一般而言,寬度越大,光滑效果越明顯。箱也可以是等寬的,其中每個箱值的區(qū)間范圍是個常量。分箱也可以作為一種離散化技術(shù)使用.

2.  回歸法

可以用一個函數(shù)擬合數(shù)據(jù)來光滑數(shù)據(jù)。線性回歸涉及找出擬合兩個屬性(或變量)的“最佳”直線,使得一個屬性能夠預(yù)測另一個。多線性回歸線性回歸的擴展,它涉及多于兩個屬性,并且數(shù)據(jù)擬合到一個多維面。使用回歸,找出適合數(shù)據(jù)的數(shù)學(xué)方程式,能夠幫助消除噪聲。

六.一些實用的數(shù)據(jù)處理小工具

1.去掉文件中多余的空行

空行主要指的是(\n,\r,\r\n,\n\r等),在python中有個strip()的方法,該方法可以去掉字符串兩端多余的“空白”,此處的空白主要包括空格,制表符(\t),換行符。不過親測以后發(fā)現(xiàn),strip()可以匹配掉\n,\r\n,\n\r等,但是過濾不掉單獨的\r。為了萬無一失,我還是喜歡用麻煩的辦法,如下:



2.如何判斷文件的編碼格式



3.文件編碼格式轉(zhuǎn)換,gbk與utf-8之間的轉(zhuǎn)換

這個主要是在一些對文件編碼格式有特殊需求的時候,需要批量將gbk的轉(zhuǎn)utf-8的或者將utf-8編碼的文件轉(zhuǎn)成gbk編碼格式的。




剛寫完比較粗糙,以后會不斷修改。下篇寫數(shù)據(jù)轉(zhuǎn)換方面的內(nèi)容,包括標(biāo)準(zhǔn)化,歸一化正則化等。如果有錯誤,歡迎指正!

參考文獻:

1.http://blog.csdn.net/u012950655/article/details/16946021

2.http://my.oschina.net/dfsj66011/blog/601546

3.http://www.cnblogs.com/nzyjlr/p/4174145.html

4.https://www.quora.com/What-is-the-basic-difference-between-noise-and-outliers-in-Data-mining

6.《數(shù)據(jù)挖掘:概念與技術(shù)》,Jiawei Han Micheline Kamber Jian Pei



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

若不方便掃碼,搜微信號: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(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".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 = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+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); }