戰(zhàn):頻率特征、主成分分析降維與Fisher判別)
簡介一份針對2000年數(shù)學(xué)建模競賽“DNA序列分類”賽題的完整解析文檔適合數(shù)學(xué)建模參賽者、生物信息學(xué)初學(xué)者以及機(jī)器學(xué)習(xí)分類方法愛好者參考。內(nèi)容以“有人管理分類問題”為主線首先從20個(gè)已知類別的人工序列中統(tǒng)計(jì)1字符、2字符、3字符串出現(xiàn)頻率構(gòu)建含41個(gè)變量的基本特征集再通過主成分分析法提取4個(gè)核心特征最后采用Fisher線性判別法建立分類模型并給出20個(gè)未標(biāo)明類別人工序列與182個(gè)自然DNA序列的詳細(xì)分類結(jié)果。資源打包為1個(gè)doc文檔共228KB正文涵蓋問題重述、模型假設(shè)、特征形成與提取、模型建立求解以及檢驗(yàn)效率等完整環(huán)節(jié)可幫助讀者系統(tǒng)掌握從特征工程到線性分類的建模思路。該文檔已有216人次學(xué)習(xí)下載適合用于備賽復(fù)習(xí)、課程作業(yè)參考或入門生物信息學(xué)中的序列分類問題。1. 有人管理分類DNA序列分類為什么從統(tǒng)計(jì)頻率起步2000年數(shù)學(xué)建模競賽的DNA序列分類題本質(zhì)上是一個(gè)模式識(shí)別里的有監(jiān)督分類問題。題目給了20條已知類別的人工序列1~10為A類11~20為B類要求提取特征、構(gòu)造分類方法再對20條未知人工序列和182條較長自然序列做預(yù)報(bào)。當(dāng)時(shí)深度學(xué)習(xí)還沒影開源生物信息學(xué)工具也遠(yuǎn)不如今天順手能依賴的是字符頻率統(tǒng)計(jì)、主成分分析和Fisher線性判別這套經(jīng)典統(tǒng)計(jì)框架。這道題的價(jià)值在于它把DNA序列這種字符數(shù)據(jù)轉(zhuǎn)化為數(shù)值特征向量再用現(xiàn)成的多元統(tǒng)計(jì)方法完成分類全流程在今天依然是序列特征工程的范本。對做生物信息學(xué)、模式識(shí)別或者競賽復(fù)現(xiàn)的人來說這份文檔值得拆開看的地方不是答案本身而是特征怎么構(gòu)造、維數(shù)怎么降、判別函數(shù)怎么定。2. 把DNA序列變成特征向量1/2/3字符串頻率與41維基本特征集2.1 滾動(dòng)窗口統(tǒng)計(jì)與歸一化頻率DNA序列是由A、T、C、G四個(gè)字符構(gòu)成的字符串統(tǒng)計(jì)頻率是最直觀的數(shù)值化手段。文檔里把序列切成長度等長的字符串人工序列121個(gè)字符自然序列更長先統(tǒng)計(jì)單字符頻率再統(tǒng)計(jì)相鄰字符組成的2字符串頻率最后統(tǒng)計(jì)3字符串頻率。統(tǒng)計(jì)方式用的是滾動(dòng)窗口比如序列ATTCG按滑動(dòng)窗口切出來的2字符串是AT、TT、TC、CG四個(gè)而不是把序列切成互不重疊的塊。這個(gè)細(xì)節(jié)很關(guān)鍵滾動(dòng)窗口保留了序列的局部相鄰關(guān)系如果改成不重疊切分會(huì)丟失大量二聯(lián)體信息。CHARACTER*121 LINE(40) INTEGER a,c,t,g,at READ*,LINE DO 20 II1,40 IIIII20 A0: C0: T0: G0 DO 10 I1,121 IF(LINE(II)(I:I).EQ.a)THEN AA1 ELSE IF(LINE(II)(I:I).EQ.c)THEN CC1 ELSE IF(LINE(II)(I:I).EQ.t)THEN TT1 ELSE IF(LINE(II)(I:I).EQ.g)THEN GG1 END IF 10 CONTINUE ATAT ACTGACTG AAA/ACTG*100. CCC/ACTG*100. TTT/ACTG*100. GGG/ACTG*100. AATTAT/ACTG*100. WRITE(5,1) AA,CC,TT,GG 1 FORMAT(1X,4F7.2) 20 CONTINUE END這段Fortran是文檔附錄里的原始程序邏輯很直白外層循環(huán)處理40個(gè)樣本前20個(gè)是學(xué)習(xí)樣本后20個(gè)是待分類的人工序列內(nèi)層循環(huán)逐字符判斷并累加計(jì)數(shù)最后除以總字符數(shù)得到百分比頻率。AATT這一項(xiàng)對應(yīng)AT合計(jì)頻率文檔里特意把它列出來是因?yàn)橐阎飳W(xué)事實(shí)表明非編碼區(qū)A和T含量偏高AT頻率本身就是一個(gè)有區(qū)分力的特征。實(shí)操中如果把這段改成Python直接用collections.Counter配合滑窗切片就能拿到同樣結(jié)果不需要逐字符判斷。2.2 16種二聯(lián)體與64種密碼子為什么要壓縮成20類單字符頻率只有4維區(qū)分能力有限于是擴(kuò)展到2字符串。A、T、C、G四個(gè)字符兩兩組合共16種二聯(lián)體每種統(tǒng)計(jì)出現(xiàn)頻率后特征維度從4跳到16。再往上走就是3字符串四個(gè)字符的排列組合共64種如果全統(tǒng)計(jì)加上前面的單字符和二聯(lián)體特征總維度是4166484維。文檔沒有這么做而是把64種3字符串按遺傳密碼表壓縮成20類——每類對應(yīng)一種氨基酸。這個(gè)壓縮是有生物學(xué)依據(jù)的64種密碼子中大多數(shù)編碼同一種氨基酸同義密碼子之間存在簡并性。壓縮之后3字符串頻率特征不再是64維而是20維加上4維單字符和16維二聯(lián)體正好組成41維基本特征集。這里有一個(gè)值得注意的取舍按氨基酸合并后原本可能區(qū)分不同序列的密碼子偏好信息被抹掉了。比如亮氨酸有六個(gè)密碼子如果某條序列特別偏好其中某一個(gè)合并統(tǒng)計(jì)后這個(gè)偏好就看不出來了。文檔在模型缺點(diǎn)里也承認(rèn)這一點(diǎn)——只考慮頻率特征分類不一定與真實(shí)生物功能完全吻合。2.3 41維特征集構(gòu)成邏輯與樣本數(shù)約束綜合來看41維特征集是這樣湊出來的4個(gè)單字符頻率A、T、C、G各一個(gè) 16個(gè)二聯(lián)體頻率 20類氨基酸對應(yīng)的3字符串頻率 1個(gè)AT合計(jì)頻率。這個(gè)設(shè)計(jì)不是拍腦袋它覆蓋了序列從單堿基組成到相鄰關(guān)聯(lián)再到三聯(lián)體編碼的三個(gè)層次信息。特征維度確定之后緊接著就遇到一個(gè)硬約束樣本數(shù)。模式識(shí)別領(lǐng)域有個(gè)經(jīng)驗(yàn)規(guī)則樣本數(shù)至少要是特征變量數(shù)的3倍否則統(tǒng)計(jì)結(jié)果不可靠。這里學(xué)習(xí)樣本只有20個(gè)按這個(gè)規(guī)則特征參數(shù)個(gè)數(shù)應(yīng)該控制在6到8個(gè)。41維明顯超標(biāo)必須降維。文檔選主成分分析不是因?yàn)樗鼤r(shí)髦而是因?yàn)樗诮稻S的同時(shí)能保留原始特征的主要變異信息且不要求特征之間相互獨(dú)立。實(shí)操里如果你的學(xué)習(xí)樣本數(shù)也不多同樣面臨這個(gè)維度詛咒先構(gòu)造一個(gè)偏大的特征集再用降維手段收緊比一開始就用小特征集更穩(wěn)妥因?yàn)槟悴淮_定哪些特征真正有判別力。3. 主成分分析降維為什么正好取4個(gè)主成分3.1 從協(xié)方差矩陣特征分解到貢獻(xiàn)率主成分分析的數(shù)學(xué)過程不復(fù)雜把41維特征向量看作一個(gè)隨機(jī)向量X求它的均方差矩陣協(xié)方差矩陣V解特征方程得到特征根λ1≥λ2≥…≥λk0每個(gè)特征根對應(yīng)一個(gè)標(biāo)準(zhǔn)正交特征向量ri。第i個(gè)主成分就是yiriX它的貢獻(xiàn)率是λi除以所有特征根之和前m個(gè)主成分的累計(jì)貢獻(xiàn)率則反映這m個(gè)主成分能表達(dá)原始信息的比例。文檔的做法是用累計(jì)貢獻(xiàn)率定維數(shù)設(shè)定一個(gè)閾值V0通常在0.85到1之間取使累計(jì)貢獻(xiàn)率超過V0的最小q作為主成分個(gè)數(shù)。這里的計(jì)算結(jié)果很漂亮前4個(gè)主成分的累計(jì)貢獻(xiàn)率達(dá)到96%意味著41維特征里的絕大部分變異信息被壓縮進(jìn)了4個(gè)變量。原文用隨機(jī)向量X和W(r1,r2,r3,r4)表示這個(gè)過程YXWY的4個(gè)分量就是最終用于分類的特征。import numpy as np from sklearn.decomposition import PCA # feature_matrix: shape (20, 41)20個(gè)學(xué)習(xí)樣本41維基本特征 # 先做標(biāo)準(zhǔn)化PCA對量綱敏感頻率特征雖然同量綱但方差差異大 X (feature_matrix - feature_matrix.mean(axis0)) / feature_matrix.std(axis0) pca PCA(n_components4) Y pca.fit_transform(X) # 查看各主成分貢獻(xiàn)率與累計(jì)貢獻(xiàn)率 print(各主成分貢獻(xiàn)率:, pca.explained_variance_ratio_) print(累計(jì)貢獻(xiàn)率:, np.cumsum(pca.explained_variance_ratio_)) # 前4個(gè)主成分的載荷向量即 rishape (41, 4) loadings pca.components_.T這段代碼對應(yīng)特征提取的核心步驟fit_transform一步完成投影。explained_variance_ratio_能直接輸出每個(gè)主成分的貢獻(xiàn)率cumsum看累計(jì)如果前4個(gè)累計(jì)不足96%說明原始特征集的信息分布和文檔里的情況不同需要調(diào)整特征構(gòu)造或閾值。有一點(diǎn)需要說明sklearn的PCA默認(rèn)做中心化但不做標(biāo)準(zhǔn)化這里手動(dòng)標(biāo)準(zhǔn)化是因?yàn)?1個(gè)特征的方差差異可能很大比如某些稀有二聯(lián)體頻率接近0方差極小不標(biāo)準(zhǔn)化會(huì)讓它們對主成分的貢獻(xiàn)被低估。3.2 主成分個(gè)數(shù)不是越多越好3個(gè)主成分的翻車案例文檔里有一個(gè)很有說服力的細(xì)節(jié)如果用前3個(gè)主成分做分類第4個(gè)學(xué)習(xí)樣本會(huì)被分錯(cuò)取前4個(gè)20個(gè)學(xué)習(xí)樣本全部正確。這說明第4個(gè)主成分雖然貢獻(xiàn)率相對小但對區(qū)分A類與B類是必要的。這個(gè)案例提醒我們累計(jì)貢獻(xiàn)率閾值本身不是終點(diǎn)還要用已知樣本的分類正確率來回頭驗(yàn)證。實(shí)操中這是一個(gè)常見陷阱——只看累計(jì)貢獻(xiàn)率超過85%就停丟掉了在判別意義上重要但方差貢獻(xiàn)小的維度。更穩(wěn)的做法是分別用前3、前4、前5個(gè)主成分做分類對比學(xué)習(xí)樣本的正確率選正確率最高且維度盡量小的那組。文檔里取3個(gè)出錯(cuò)、取4個(gè)全對的對比就是最樸素的主成分個(gè)數(shù)選擇實(shí)驗(yàn)。如果你在復(fù)現(xiàn)時(shí)發(fā)現(xiàn)取4個(gè)也不能全對不要急著懷疑PCA先檢查特征集構(gòu)造是不是和原文一致——尤其是3字符串那20類氨基酸的合并映射表很容易寫錯(cuò)。3.3 從41維到4維降維解決了什么問題降維的第一個(gè)收益是滿足樣本數(shù)與變量數(shù)的比值約束。20個(gè)樣本配41維特征統(tǒng)計(jì)模型很容易過擬合壓到4維后樣本數(shù)是變量數(shù)的5倍Fisher判別的協(xié)方差矩陣估計(jì)就穩(wěn)定多了。第二個(gè)收益是去噪——文檔里提到多余特征不僅沒好處還會(huì)帶來噪音干擾分類。第三個(gè)收益是可視化4維特征無法直接畫圖但如果你降到2維或3維就能直觀看到兩類樣本的分布情況。需要提醒的是PCA投影后特征的方向意義變模糊了每一維都是41個(gè)原始特征的線性組合不能簡單說第一主成分代表AT含量。載荷向量里每個(gè)原始特征的系數(shù)可正可負(fù)解釋單個(gè)主成分的生物學(xué)含義很難。在這類競賽題場景下主成分是純粹的分類輸入不需要生物學(xué)解釋這是統(tǒng)計(jì)方法和真實(shí)科研任務(wù)的一個(gè)差別。4. Fisher線性判別分類決策與留一法檢驗(yàn)4.1 判別函數(shù)的構(gòu)造原理特征降維完成后剩下的問題是在4維特征空間里找一條分界線。文檔用的是Fisher線性判別法核心思想是找一個(gè)線性判別函數(shù)U(x)使得不同類別間差異相對類別內(nèi)差異最大化。用公式表達(dá)就是(U(x)在兩個(gè)母體下的期望差)的平方除以兩個(gè)母體方差的加和取最大值。具體解法有現(xiàn)成結(jié)論U(x)(X??-X??)?(Σ?Σ?)?1X其中X??和X??是兩類學(xué)習(xí)樣本的均值向量估計(jì)Σ?和Σ?是兩類樣本的協(xié)方差矩陣估計(jì)。這個(gè)式子直觀理解就是先看兩類中心的差異方向再用類內(nèi)協(xié)方差做白化讓分界方向避開類內(nèi)散度大的方向。分類門檻值U?U(αX??(1-α)X??)文檔取α1/2即兩類樣本數(shù)相等時(shí)取兩類中心的中間點(diǎn)。import numpy as np # Y: shape (20, 4)學(xué)習(xí)樣本的主成分得分 # labels: shape (20,)前10個(gè)為A類(記0)后10個(gè)為B類(記1) def fisher_discriminant(Y, labels): # 分別計(jì)算兩類的均值向量與協(xié)方差矩陣 class0 Y[labels 0] class1 Y[labels 1] mean0 class0.mean(axis0) mean1 class1.mean(axis0) cov0 np.cov(class0.T) cov1 np.cov(class1.T) # Fisher判別方向 w w np.linalg.solve(cov0 cov1, mean0 - mean1) # 計(jì)算門檻值兩類樣本數(shù)相等alpha0.5 midpoint 0.5 * (mean0 mean1) u0 np.dot(w, midpoint) return w, u0 w, u0 fisher_discriminant(Y_train, labels_train) # 對未知樣本 X_new 判類投影值 u0 判為A類否則B類 u_new np.dot(w, Y_new) pred np.where(u_new u0, 0, 1)這里的np.linalg.solve是解線性方程組對應(yīng)公式里的(Σ?Σ?)?1(X??-X??)比直接求逆矩陣數(shù)值上更穩(wěn)定。判別符號方向取決于mean0 - mean1的計(jì)算順序如果后面預(yù)測結(jié)果的類別反了把兩者交換或者把比較符號反過來即可。門檻值取兩類中心的中點(diǎn)是默認(rèn)選擇若兩類樣本數(shù)不等或誤分類代價(jià)不同α需要相應(yīng)調(diào)整。4.2 留一法檢驗(yàn)每次抽走一個(gè)樣本做預(yù)報(bào)模型建好后不能直接拿去預(yù)報(bào)未知樣本得先驗(yàn)證它靠不靠譜。文檔用留一法jackknife做交叉驗(yàn)證每次從20個(gè)學(xué)習(xí)樣本中取出一個(gè)用剩下的19個(gè)重新訓(xùn)練分類模型然后對取出的這個(gè)樣本預(yù)報(bào)類別。20個(gè)樣本循環(huán)一遍看預(yù)報(bào)成功率。結(jié)果很理想20次留一檢驗(yàn)全部預(yù)報(bào)正確成功率100%。這個(gè)數(shù)字不是重點(diǎn)重點(diǎn)是文檔同時(shí)記錄了另一個(gè)信息每次抽走不同樣本重新訓(xùn)練對后20個(gè)未知人工序列的預(yù)報(bào)結(jié)果有微小波動(dòng)。分別抽走樣本4、15、20時(shí)預(yù)報(bào)結(jié)果有一個(gè)樣本的差異抽走樣本17時(shí)預(yù)報(bào)結(jié)果有兩個(gè)樣本的差異。這說明分類模型對訓(xùn)練集的變動(dòng)有一定敏感性并不是完全穩(wěn)定。實(shí)操里留一法適合這種小樣本場景計(jì)算量可控。如果樣本量很大留一法的計(jì)算成本會(huì)很高應(yīng)該改用k折交叉驗(yàn)證。文檔選了留一法而不是隨機(jī)劃分訓(xùn)練集和測試集是因?yàn)橹挥?0個(gè)學(xué)習(xí)樣本任何固定劃分都會(huì)讓訓(xùn)練集太小而留一法用19個(gè)樣本訓(xùn)練、1個(gè)樣本驗(yàn)證最大化利用了有限數(shù)據(jù)。4.3 未知樣本預(yù)報(bào)與分類結(jié)果口徑最終預(yù)報(bào)結(jié)果是20個(gè)人工序列里22、23、25、27、29、34、35、36、37判為A類其余11個(gè)判為B類。182個(gè)自然序列里40個(gè)判為B類其余142個(gè)判為A類。文檔強(qiáng)調(diào)無法分類的不寫入說明當(dāng)時(shí)對某些樣本的判別結(jié)果可能落在門檻值附近分類置信度不足。這個(gè)細(xì)節(jié)對復(fù)現(xiàn)很重要如果你用同樣的特征和模型跑出來的結(jié)果和原文有出入先看差異樣本是不是恰好集中在判別邊界附近。Fisher判別只給一個(gè)線性分界樣本離分界越近誤判風(fēng)險(xiǎn)越高。更嚴(yán)謹(jǐn)?shù)淖龇ㄊ菍γ總€(gè)預(yù)測樣本同時(shí)輸出投影值u_new與門檻值u?的距離當(dāng)作置信度參考。文檔后面提到的每次留下一個(gè)樣本重新訓(xùn)練預(yù)報(bào)結(jié)果有1~2個(gè)樣本波動(dòng)本質(zhì)上就是邊界樣本分類不穩(wěn)定的體現(xiàn)并不是模型有錯(cuò)。5. DNA序列分類特征工程的四個(gè)坑從稀疏頻率到降維過度5.1 短序列頻率稀疏0頻率的特征值如何處理現(xiàn)象人工序列長度只有121個(gè)字符統(tǒng)計(jì)64種3字符串時(shí)很多組合壓根沒出現(xiàn)頻率是0。特征矩陣?yán)锍霈F(xiàn)大量的零值某些氨基酸類別在所有序列里頻率都很低。原因序列太短3字符串的可能組合數(shù)是64而序列只能提供119個(gè)滾動(dòng)窗口樣本121個(gè)字符減去前2個(gè)統(tǒng)計(jì)到每個(gè)組合上平均不到2次。零頻率不代表生物學(xué)意義上的缺失只是采樣不充分。解決先按氨基酸分組壓縮再統(tǒng)計(jì)頻率能顯著緩解稀疏問題——64種密碼子合并成20類后每類的期望頻次提高了3.2倍。如果還想進(jìn)一步處理可以對頻率做平滑比如加1平滑或者用偽計(jì)數(shù)。不過當(dāng)時(shí)競賽場景里直接算百分比就行平滑操作反而可能引入額外噪音。5.2 降維維數(shù)不足取3個(gè)主成分時(shí)第4個(gè)樣本分類出錯(cuò)現(xiàn)象特征提取時(shí)只保留前3個(gè)主成分Fisher判別對20個(gè)學(xué)習(xí)樣本分類第4個(gè)樣本被判錯(cuò)。保留前4個(gè)主成分后全部正確。原因第4個(gè)主成分的貢獻(xiàn)率不是最高的但它攜帶了區(qū)分A類和B類所必需的信息。累計(jì)貢獻(xiàn)率閾值只保證信息量不保證判別力——對分類有用的成分可能方差占比不大。解決把主成分個(gè)數(shù)的選擇從看累計(jì)貢獻(xiàn)率改成看分類回判正確率。先固定Fisher判別,然后逐個(gè)試q2、3、4、5選正確率最高的一組。注意不要為了追求正確率無限增加q維度上去了樣本數(shù)與變量數(shù)之比會(huì)惡化Fisher判別反而變得不穩(wěn)定。5.3 氨基酸壓縮丟信息64種密碼子合并成20類的代價(jià)現(xiàn)象兩個(gè)序列如果整體氨基酸組成很接近但密碼子使用偏好明顯不同壓縮成20類后特征幾乎相同分類器無法區(qū)分它們。原因遺傳密碼的簡并性讓多個(gè)密碼子對應(yīng)同一種氨基酸壓縮是按生物學(xué)語義做的抹掉了密碼子層面的頻率差異。文檔原文承認(rèn)DNA序列的分類不一定與實(shí)際情況完全相符。解決如果任務(wù)允許保留64維3字符串頻率作為備選特征集與20維壓縮版對比分類效果。在競賽場景里以20維為主是合理的因?yàn)闃颖緮?shù)太少經(jīng)不起64維特征的統(tǒng)計(jì)壓力但如果你在真實(shí)生物信息學(xué)任務(wù)里處理全基因組序列樣本量大得多可以嘗試不壓縮的版本。5.4 訓(xùn)練集太小20個(gè)樣本撐不起復(fù)雜模型現(xiàn)象樣本數(shù)只有20個(gè)學(xué)習(xí)樣本和未知樣本混在一起做統(tǒng)計(jì)推斷任何復(fù)雜模型的參數(shù)估計(jì)都不可靠。原因模式識(shí)別經(jīng)驗(yàn)規(guī)則要求樣本數(shù)至少是變量數(shù)的3倍。41維特征配上20個(gè)樣本嚴(yán)重超標(biāo)即使降到4維也只是達(dá)到5倍Fisher判別對協(xié)方差矩陣估計(jì)仍然敏感。解決堅(jiān)持小特征集簡單線性模型的組合這正是文檔的核心策略。不要去試決策樹、神經(jīng)網(wǎng)絡(luò)這類需要大量樣本的模型在這個(gè)數(shù)據(jù)規(guī)模下它們很容易過擬合。留一法交叉驗(yàn)證是評估此類小樣本模型的最合適手段。6. 驗(yàn)證與進(jìn)階把分類穩(wěn)定性納入模型評估流程文檔里的留一法檢驗(yàn)其實(shí)還有一層沒展開的用法20次留一實(shí)驗(yàn)得到的20組預(yù)報(bào)結(jié)果本身就是評估穩(wěn)定性的樣本。我看這份文檔時(shí)最認(rèn)同的處理是它不只報(bào)告100%正確還記錄了抽走不同樣本時(shí)預(yù)報(bào)結(jié)果的差異——這比單獨(dú)一個(gè)正確率有用得多。復(fù)現(xiàn)時(shí)我一般會(huì)把20次留一結(jié)果存成矩陣每次預(yù)報(bào)的20個(gè)未知樣本類別逐列對比統(tǒng)計(jì)每一條未知序列被判定為A類的次數(shù)比例。如果絕大多數(shù)序列在20次實(shí)驗(yàn)里類別完全一致說明模型穩(wěn)定如果有幾條序列頻繁搖擺它們就是需要單獨(dú)考察的邊界樣本。至于延伸方向同一套流程稍加改動(dòng)就能適配今天的場景把41維頻率特征換成k-mer計(jì)數(shù)k4或5主成分分析換成UMAP或t-SNE做非線性降維Fisher判別換成線性SVM或邏輯回歸。但底層的思路沒變——先構(gòu)造一個(gè)覆蓋面廣的特征集再降維再用簡單線性模型分類最后用交叉驗(yàn)證檢驗(yàn)穩(wěn)定性。這套方法論在當(dāng)年能用現(xiàn)在照樣能用只是工具名字變了。我第一次復(fù)現(xiàn)這道題時(shí)踩過取3個(gè)主成分的坑當(dāng)時(shí)也是第4個(gè)學(xué)習(xí)樣本被判錯(cuò)翻回原文看到那句話才反應(yīng)過來是維數(shù)沒取夠。從那以后我每次做PCA降維都強(qiáng)制自己把分類正確率和累計(jì)貢獻(xiàn)率放在一起看再也沒在維度選擇上翻過車。這份文檔里的模型思路和結(jié)果清單都足夠完整按上面步驟走一遍基本能還原當(dāng)年的預(yù)報(bào)結(jié)果。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取