日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python数据分析新手入门课程学习——(五)特征工程概述(数据预处理)(来源:慕课网)

發(fā)布時間:2023/12/16 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python数据分析新手入门课程学习——(五)特征工程概述(数据预处理)(来源:慕课网) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

機器學習:計算機根據(jù)經(jīng)驗(數(shù)據(jù))自動化做出決策的過程最終機器學習達到一種狀態(tài),是當我們輸入數(shù)據(jù)后,他能根據(jù)我們之前的訓練或我們定義的目標輸出我們想要的結(jié)果,這個過程其實就像一個函數(shù)一樣。我們數(shù)據(jù)或者需求就是機器學習主體的輸入,而這個主體的輸出就是我們想要的結(jié)果。我們把學習機器主體叫做數(shù)據(jù)模型。數(shù)據(jù)模型是個函數(shù),也是機器學習學習狀態(tài)的體現(xiàn)。數(shù)據(jù)模型并不是由人搭建起來的系統(tǒng),它來源于數(shù)據(jù),由數(shù)據(jù)構造。

數(shù)據(jù)模型的作用:根據(jù)我們上面講到的輸入得到一組我們狀語從句:期待的輸入側(cè)相關的映射我們通過一些模型框架,也就是算法,如決策樹,SVM等把數(shù)據(jù)組織起來就可以形成數(shù)據(jù)模型。即便使用同樣的模型框架算法,在不同的數(shù)據(jù)集的參與下,也會形成各種不同的模型。同樣的道理,同樣的數(shù)據(jù),在不同的框架算法下,也有著不同的表現(xiàn)。因此數(shù)據(jù)模型的英文數(shù)據(jù)框架算法狀語從句:數(shù)據(jù)共同。作用英文的查詢查詢結(jié)果經(jīng)驗表明,數(shù)據(jù)集的質(zhì)和量的大小于數(shù)據(jù)模型的復雜度是呈負相關關系的數(shù)據(jù)集越大,數(shù)據(jù)集越好,數(shù)據(jù)模型的復雜度就越低。反之亦然。有時候數(shù)據(jù)集質(zhì)和量差到一定程度,根本無法建立起真正反應真實數(shù)據(jù)關系的模型的

如:有一張128×128的圖,我們要構建個數(shù)據(jù)模型來判斷圖片里到底是貓還是狗,或者什么都不是最簡單的模型就是把全世界所有情況貓和狗的128×128可能出現(xiàn)的影像全部都做個映射,一旦一張圖片出現(xiàn)了,我們立刻就知道,哪個是貓,哪個是狗,這是因為它已經(jīng)提前映射好了。那如果我們只給出了寥寥幾張圖,這個時候要構建模型就會非常復雜。如果這個時候新來了張圖,是一張之前提供的,沒有的顏色,的貓,那模型的辨識程度就很難讓人滿意,而且一個模型最終的形態(tài)是什么樣子的,起決定作用的就是數(shù)據(jù)。數(shù)據(jù)質(zhì)量的好壞直接影響著模型的好壞和功能數(shù)據(jù)的數(shù)量和質(zhì)量要比算法重要的多

因為有了各種不同的模型算法,對數(shù)據(jù)就有了不同的要求,我們可以直接使用數(shù)據(jù),也可以提取這些數(shù)據(jù)的特征進行使用特征怎么提取,怎么使用,這是個非常浩大的工程例如:一個三位數(shù),我們能提取出哪些特征呢?其中這里面有非常多的特征。這個三位數(shù)的個,十,百位,是不是等差數(shù)列,是不是等比數(shù)列,三位數(shù)是不是都一樣,是不是這個數(shù)字可以和哪個節(jié)日相重合。甚至有幾個1,有幾個2都是它的特征。哪些特征有用,哪些沒用,往往和我們建模的目的是有關系的。有種說法,說是在中國的股市上,股票代碼里,4這個數(shù)字特別多的股票一般都是被低估的股票;而6和8多的股票都是被高估的股票還有像車牌號,手機號,有錢人喜歡用連號等,通過這些特征我們也能大概判斷出這些人的經(jīng)濟水平。剛才說到的這些特征都蘊含在數(shù)據(jù)里,也極其 明顯的。要提取這些特征需要我們有著比較豐富的社會經(jīng)驗,也需要我們善于觀察,總結(jié)和歸納。一個三位數(shù)字就已經(jīng)有非常多的特征了,更別說圖片,文字之類的數(shù)據(jù)了。所以,面對數(shù)據(jù)我們需要一條一條地多看的情況下,尤其要結(jié)合探索性數(shù)據(jù)的分析方法,宏觀地分析每個情況。總結(jié)歸納相關的特征,極端些,可以羅列出所有我們想不到的,想得到的,可能有用的,甚至我們看起來沒用的所有特征,有用就用,沒用就放著;更極端些,我們可以把每條數(shù)據(jù)當作一個特征,最終建立起一對一的映射關系,除了必要的特征,我們有時還需要對這些特征進行相應的轉(zhuǎn)化,才能在特定的數(shù)據(jù)模型算法得到最佳的效果。上面我們說到的所有關于特征的含義,提取,處理等內(nèi)容,都是特征工程的內(nèi)容(如下)

?一,特征使用:確定數(shù)據(jù)源

  • 數(shù)據(jù)選擇:是分析和我們目標最相關的數(shù)據(jù)都有哪些,這些數(shù)據(jù)如何獲取如:有些數(shù)據(jù)以表的形式存在的SQL表中,有的數(shù)據(jù)是以文件形式存在日志中,還有的數(shù)據(jù)必須通過抓取才能獲得。這些都是數(shù)據(jù)選擇階段需要考慮的內(nèi)容。
  • 可用性:指數(shù)據(jù)特征是否能持續(xù)輸出,如:我們需要建立模型,用到的數(shù)據(jù)是實時更新,或天級更新的,那么只能獲取到歷史數(shù)據(jù)是遠遠不夠的;同時如果數(shù)據(jù)的時效性太差,也是不能使用的;再或者某些數(shù)據(jù)特征雖然我們極其需要,但因安全性,成本等,我們并不能使用以上都是可用性需要考慮的內(nèi)容。
  • ?二,特征獲取:確定與存儲數(shù)據(jù)的過程

  • 特征來源:即我們需要的特征來源于哪張??表,哪個文件,是不是有的特征來源于兩張表或者來源于一張表和另個文件。
  • 特征存儲:比如說,這些表來源于不同的文件或者不同的數(shù)據(jù)庫和文件的組合,那么就要把不同地方的特征進行規(guī)整,存儲在以后方便使用的文件中。
  • 三,特征處理(重點)

    特征預處理,目的是指數(shù)據(jù)屬性和特征能盡可能大的發(fā)揮作用,體現(xiàn)差別。

    1.數(shù)據(jù)清洗

    (1)數(shù)據(jù)樣本抽樣:

    ?

    1)樣本要具有代表性:樣本各個特征的比例應該與整體的比例保持一致;

    2)比如:研究人們?nèi)粘o嬍沉晳T,但所有被研究人員男女比例失調(diào),達到了極其失真的比例7:1,樣本比例較人類這個整體不是很平衡,我們就需要通過一定的手段使樣本平衡。我們可以在充分考慮代表性的前提下,少取些男性樣本的數(shù)量,使男女樣本接近于1,這樣的抽樣雖然相較于被研究的整體有失代表性,但相對于人群的總體,更具有代表性;

    3)只有在量大維度廣的數(shù)據(jù)中我們才能獲得最為準確的結(jié)論。當然利用手頭工具可能不能處理全量數(shù)據(jù),但如果我們的目的是為了得到更準確的結(jié)論,建立更準確的模型,那就非常有必要考慮使用更合適的工具,如Hadoop的等大數(shù)據(jù)工具。

    (2)異常值(空值)處理:

    ?

    (1)空值,重復值,超出1.5倍上下四分位間距的值,實際情況下不允許出現(xiàn)的值。這些值可用函數(shù)處理,也可以自己添加規(guī)則進行識別。

    (2)異常值較多,可以考慮用新值代替異常值;或用判斷這個屬性是否是異常值的判斷結(jié)果代替異常值;還可以考慮用集中值(除異常值之外的均值,中位數(shù),眾數(shù)等)進行指代;

    (3)連續(xù)數(shù)據(jù)中,用四分位間距確定的上下邊界來確定超過上下邊界的數(shù),連續(xù)性的數(shù)還可以用插值的方法來填充異常值。


    2.特征預處理

    ? ?(1)特征選擇:剔除與標注不相關或冗余的特征,減少特征的個數(shù)。

    (帶來的效果是減少了模型訓練的時間。尤其是當數(shù)據(jù)特征比較多的時候(成千上萬個),有時還會有效地減少過擬合,甚至提升模型的準確度。我們前面講過PCA,奇異值變換等通過變換的方式降維的方法,這些對特征降維的處理方式,我們叫做特征提取。既然叫特征提取,那就少不了變換。)

    而特征選擇則依靠研究技術調(diào)查技術方法,或者數(shù)據(jù)模型,機器學習模型本身的特征進行與標注影響大小的排序后,剔除排序靠后的特征,實現(xiàn)降維。特征選擇可以放在對特征處理之前進行,也可以在“ 特征變換”后進行。總之,還是要結(jié)合屬性本身的特征和任務的需求進行選擇。特征選擇需要重復迭代,不嫌麻煩多次驗證。有時可能我們自己認為特征選擇已經(jīng)做的足夠好了,但實際模型中訓練并不太好,所以每次特征選擇都要使用模型去驗證,最終的目的是獲取能訓練出更好模型的數(shù)據(jù)

    數(shù)據(jù)科學中,有個比較常見的概念 - 數(shù)據(jù)歸約。特征選擇就是數(shù)據(jù)規(guī)約的一種處理方式(另一種是抽樣)。

    # 引入線性回歸器 from sklearn.svm import SVR # 引入決策樹回歸器 from sklearn.tree import DecisionTreeRegressor# 確定特征X和標注Y # 獲取某列數(shù)據(jù)最直接的方式是df.[列標簽],但是當列標簽未知時可以通過loc獲取列數(shù)據(jù)。 X=df.loc[:,["A","B","C"]] Y=df.loc[:,"D"] # 引入幾個特征選擇思路的主要方法(SelectKBest——過濾,RFE——包裹,SelectFromModel——嵌入) from sklearn.feature_selection import SelectKBest,RFE,SelectFromModel

    ?

    數(shù)據(jù)選擇有三個切入思路。

    1)過濾思想:。直接評價某個特征與標注相關性的特征如果相關性小,就去掉表中我們的標注無疑會落入連續(xù)值或者離散值的范疇,而把特征進行比較粗的分類,也可以分為離散值或連續(xù)值,于是我們就可以在這張表中找到標注對應的類型與特征對應的類型關聯(lián)性對應的評價方法進行評價。當然這里的閾值設置可能比較靈活。大伙可以在特征比較多的時候,閾值設得高些;特征少時,閾值低些;或直接根據(jù)任務需求,經(jīng)驗進行設置。

    ?

    skb =SelectKBest(k=2) # 擬合 # (function f_classif:離散值和連續(xù)值用的function可能不一樣, # 所以處理時一張表可能通過不同的方法進行篩選) skb.fit(X,Y) # C列相關性不高,被去掉了 skb.transform(X)

    2)包裹思想:包裹即包裝,包括的意思假設所有特征是個集合X,最佳的特征是它的一個子集,我們的任務就是找到這個子集我們需要先確定個評價指標,比如正確率于是我們可以遍歷特征子集,找到正確率評價下最佳的子集;也可以一步步進行迭代,比如我們先拆分成幾個大點兒的子集,如果這個時候確定了最優(yōu)的特征子集,就針對這個特征子集進行接下來的拆分,直到我們的評價指標下降過快或低于閾值時,整個過程結(jié)束。

    ?這個思想下有個比較常用的方法:RFE算法

    ? # RFE需要指定estimator:這里我們用線性回歸器(復雜度不高)# step:表示每迭代一步去掉幾個特征 rfe =RFE(estimator=SVR(kernel="linear"),n_features_to_select=2,step=1) # sklearn中這些類型實體,尤其是數(shù)據(jù)轉(zhuǎn)化的類型實體,他們的操作是有共通性的(都有fit、fit_transform) # 擬合過后再進行變換 rfe.fit_transform(X,Y) # 這個輸出結(jié)果是"A"和"C",與上個結(jié)果不一致?

    ?

    ?3 )嵌入思想:嵌入的主體是特征,被嵌入的實體是個簡單的模型。也就是說根據(jù)個簡單的模型分析特征的重要性。最常見的方式,是用正則化的方式來做特征選擇。

    如:我們這里有?個特征,通過個回歸模型對標注進行回歸,回歸可以是線性回歸,也可以是邏輯回歸等最后得到一些瓦特系數(shù),然后對這些瓦特系數(shù),進行正則化或正規(guī)化(正則化方式之后講,這里可認為把它轉(zhuǎn)化成個0-1之間的數(shù))。此時,這些系數(shù)就反應了這些特征的分量和重要程度,如果有的系數(shù)比較小(像W_2),我們就可以把這個特征去掉。

    嵌入思想實際上是有風險的,如有時模型選擇不當,會導致重要屬性被丟棄,所以,這里在嵌入思想選擇的模型最好是和最終做預測的模型有比較強的關聯(lián)如:都用線性模型或都用同樣分布形式的(也就是函數(shù)圖像一致的)非線性函數(shù)。

    ?

    # threshold表示它重要性因子的那個數(shù),低于多少得去掉。 # threshold設置得太高,去掉的屬性也越多 # threshold設置得太低,屬性則都被保留# 為什么不直接用estimator呢,為什么還要進行特征選擇呢? # 因為數(shù)據(jù)量可能會非常大,而進行特征選擇我們要快速地選出有用的特征。 # 所以我們可以對一部分樣本進行簡單的評測,簡單地用SelectFromModel,或其他的評測方法, # 而評測通過的話,我們就可以用estimator中指定的方法進行建模了。 #特征選擇中我們可能用的是一些樣本,而在正式建模中我們用的是全量數(shù)據(jù) sfm =SelectFromModel(estimator=DecisionTreeRegressor(),threshold=0.001) sfm.fit_transform(X,Y)

    ?


    我們想預測接下來幾個小時會不會下雨,我們可以拿到歷史數(shù)據(jù)包括以下屬性,這些屬性中和我們目的直接相關的只有一個(“下雨?不下雨?”),它就是標簽,機器學習的建模是為了建立其他屬性與我們目的之間的關系。

    標注:反應目的的屬性(我們關注的,又不容易獲得的,但可以存在些屬性和它有關系,并且這些有關系的屬性是容易獲取到的)其他屬性就是我們接下來要研究的特征。?

    拿HR表來說,它也需要個標簽,它的目的是預測員工是否會離職,故此標簽為離職率。


    ?(2)特征變換:根據(jù)特征的特性進行一定方式的轉(zhuǎn)換,使特征能發(fā)揮出它的特點。

    接下來我們看幾個比較常用的特征變換的方法:

    (1)對指化:就是對數(shù)據(jù)進行對數(shù)化和指數(shù)化的過程我們分別看下對數(shù)化和指數(shù)化的過程

    指數(shù)化:就是將一個數(shù)進行指數(shù)變化的過程指數(shù)的底數(shù)一般情況下取自然底數(shù)?指數(shù)化的é是什么呢從圖上看,自然指數(shù)的底數(shù)函數(shù)中,在大于0的部分,橫軸表示自變量有很小一段變化,在縱軸上會有比橫軸尺度更大的變化。也就是說,原來的大于0的范圍內(nèi),數(shù)據(jù)與數(shù)據(jù)間的差異很小,而經(jīng)過指數(shù)變換,數(shù)據(jù)與數(shù)據(jù)間的差距變大了如:我們計算出某特征數(shù)據(jù)屬于Y1,Y2,Y3的概率,進行指數(shù)化(他們的差距從0.1變成0.14),再進行歸一化(差距變小了0.1變成了0.04)。這個過程叫SOFTMAX(在監(jiān)督學習神經(jīng)網(wǎng)絡中有非常廣泛的應用)。

    對數(shù)化:底數(shù)可以取2,10,例如如果一個數(shù)遠大于1,橫軸變化很大的時候,縱軸的變化也不會很大這樣可以將一個非常大的數(shù)縮放到一個容易與方便計算的范圍內(nèi)如:收入數(shù)據(jù)。


    (2)離散化:將連續(xù)數(shù)據(jù)變成離散數(shù)據(jù)的離散化操作。

    數(shù)據(jù)需要被離散化的原因如下:

    第一,連續(xù)數(shù)據(jù)的信息很多,但其中也有可能存在些我們意想不到的噪聲如:我們想通過收入分析國企,私企和外企哪個待遇好如果我們可以獲得員工的收入流水,基本可以確定和比較收入情況了。但如果有員工會通過接私活的方式賺取外快,或工資的一部分被公司扣去用作其他用途,那流水就有噪聲,不能直接反應收入情況。如果有合適的方法將數(shù)據(jù)離散化,直接對比離散值的分布屬性就有可能得出更令人信服的結(jié)論;第二,某些算法要求數(shù)據(jù)必須是離散的,如:樸素貝葉斯。第三,數(shù)據(jù)的非線數(shù)據(jù)映射的需求;如:拿某些數(shù)據(jù)的分布來看,分布可能會有明顯的拐點或拐角點連續(xù)數(shù)值在不同的區(qū)間內(nèi)可能代表著不同的含義。

    離散化的方法:

    自因變量優(yōu)化:就是根據(jù)自變量,因變量的有序分布,找到拐點,特殊變化點進行離散化(詳見探索性數(shù)據(jù)分析);等頻分箱又叫等深分箱(如下圖);等距分箱又叫等寬分箱(67-6 = 61,平均分成3分,分成3個區(qū)間)。接下來我們著重分析分箱技術:數(shù)據(jù)在分箱前一定要進行排序。既然是個箱子,就有它的深度和寬度。

    import numpy as np import pandas as pd lst= [6,8,10,15,16,24,25,40,67] # 等深分箱 pd.qcut(lst,q=3,labels=["low","medium","high"]) # 等寬分箱 pd.cut(lst,bins=3,labels=["low","medium","high"])

    (3)歸一化:最小化,最大化的一種特殊形式,將數(shù)據(jù)所觸及的范圍縮放到指定大小范圍內(nèi)所謂歸一化,是將數(shù)據(jù)轉(zhuǎn)換到0-1范圍的內(nèi)這樣處理起來會更方便些一方面,可以觀察單個數(shù)據(jù)相對于數(shù)據(jù)整體情況的比例;另一方面,如果遇到不同樣綱的數(shù)據(jù)特征,可以方便地建立起這些數(shù)據(jù)特征之間進行合適地距離度量方法。(如:特征甲:0-10,特征B:0-100,將他們都進行歸一化,他們的范圍都是0-1,這樣對比數(shù)據(jù)就比較科學)

    ?

    import numpy as np import pandas as pd # 導入歸一化和標準化需要用的包 from sklearn.preprocessing import MinMaxScaler,StandardScaler # 歸一化 # reshape(-1,1)表示不指定有多少行,但一定要有1列 MinMaxScaler().fit_transform(np.array([1,4,10,15,21]).reshape(-1,1))

    (4)標準化:將數(shù)據(jù)轉(zhuǎn)換成一個標準的形式歸一化也可以說是種標準化這里的標準化是指將數(shù)據(jù)縮放到均值為0,標注差為1的尺度上。

    標準化的意義:體現(xiàn)一個數(shù)據(jù)與該特征下其他數(shù)據(jù)相對大小的差距關系(如:你180,其他同學都是160,你就會覺得你很高;但是全班一半人都是180,其他都是160,你就不會覺得自己有多高了。)? ?

    # 標準化 # 先fit再transform也是可以的 StandardScaler().fit_transform(np.array([1,1,1,1,0,0,0,0]).reshape(-1,1)) StandardScaler().fit_transform(np.array([1,0,0,0,0,0,0,0]).reshape(-1,1))

    ?


    ?(5)數(shù)值化:把非數(shù)值數(shù)據(jù)(處理起來不方便)轉(zhuǎn)化為數(shù)值數(shù)據(jù)的過程。

    import numpy as np import pandas as pd from sklearn.preprocessing import LabelEncoder,OneHotEncoder

    我們回顧下數(shù)據(jù)的四種類型:前三類數(shù)據(jù)在使用時,要根據(jù)是否進行相關的運算進行轉(zhuǎn)換。

    定序數(shù)據(jù)的數(shù)值化,可以考慮使用標簽化的處理方式。(用0,1,2等值代替原來的數(shù)據(jù)屬性。各個值之間相差多大并不重要。有時,定序數(shù)據(jù)都不需要特殊化的處理,都可以交給參數(shù)去做)。也可以使用獨熱方法進行編碼(當沒有相對大小關系的時候)。??

    ?

    # 標簽化 LabelEncoder().fit_transform(np.array(["Down","Up","Up","Down"]).reshape(-1,1)) LabelEncoder().fit_transform(np.array(["Low","Medium","High","Medium","Low"]).reshape(-1,1))

    定位數(shù)據(jù)(沒有相對大小關系的)的處理(麻煩些):直接進行標簽化,會有額外的擾動這些信息有可能會影響之后建立模型的準確性定位數(shù)據(jù)中每種不同的數(shù)值,相互差別應該是一致的。將數(shù)據(jù)特征進行擴維,原來的?維屬性由?維向量來表示。這個向量只有一位是1,其他都是0。

    # 在one-hot之前必須先把它label_encoding lb_encoder =LabelEncoder() # 傳入一個數(shù)組 lb_tran_f = lb_encoder.fit_transform(np.array(["Red","Yellow","Blue","Green"])) # label_encoding的結(jié)果傳入 oht_encoder = OneHotEncoder().fit(lb_tran_f.reshape(-1, 1)) oht_encoder.transform(lb_encoder.transform(np.array(["Yellow","Blue","Green","Green","Red"])).reshape(-1,1)).toarray()

    ?


    ??(6)正規(guī)化:本質(zhì)是將一個向量的長度正規(guī)到單位1。

    import numpy as np import pandas as pd from sklearn.preprocessing import Normalizer

    如果距離的尺度用L1距離,那就是L1正規(guī)化。分子保持向量的分量不變,分母為各個分量絕對值的和。

    如果使用L2距離(歐式距離),那就是L2正則化。分母是向量的歐式長度。

    例如:

    ?數(shù)據(jù)處理中正規(guī)化的用法:第一個用的少;第二個可以體現(xiàn)出一個對象特征影響的相對關系特點;第三個,可用到線性回歸,邏輯回歸等,可用L2正則化可以表示每個特征對于標注的影響占比比較大,哪個比較小。?

    # 注意:默認是對行進行正則化 Normalizer(norm="l1").fit_transform(np.array([[1,1,3,-1,2]])) Normalizer(norm="l2").fit_transform(np.array([[1,1,3,-1,2]]))

    ?


    ?

    ?(3)特征降維?

    PCA,奇異值分解都沒有考慮到標注,而是讓特征與特征之間的相關性強弱來決定降維后的分布形態(tài),是一種無監(jiān)督的降維方法。

    使用到標注的降維方法:?

    LDA處理過程:一個特征矩陣,特征有X_0-X_m共米個特征,Y是它的標注我們以二分類為例,這里的?取0/1同時這個特征矩陣有?行,對應于?個對象。

    特征抽出來形成個特征矩陣:

    我們把這個矩陣根據(jù)行進行切分,可以分成兩個子矩陣,一個矩陣的標注都是0,另一個都是1:

    針對這兩個子矩陣做線性變換(標注y并不參與計算):

    ?LDA的核心是標注間距離盡可能大,同一標注內(nèi)距離盡可能小。所以我們分成兩部分進行衡量。

    針對兩個矩陣可能出現(xiàn)的行列數(shù)據(jù)不匹配的情況,我們可以最大化一個函數(shù)如下:

    用數(shù)學的方法整理下整個過程:我們先計算每個標注下,每個特征的均值(是為了運算方便);然后最大化一個函數(shù),這個函數(shù)要求的變量就是參數(shù)W,其他值都是根據(jù)數(shù)據(jù)指定的,是已知的函數(shù)的分子是兩個標注的子矩陣減均值后再用參數(shù)做變換,然后取平方,再取范數(shù)將其標量化;而分母是兩個新的子矩陣的平方和,然后取范數(shù),可等效(減少運算量,并解決兩個子矩陣尺寸大小不一致的情況【即行不一致,樣本數(shù)量不一致,但特征數(shù)量一致,就保證了中間兩個矩陣是可以相乘的】)如下形式。

    ?分子也等效得:

    簡化后如下,最終結(jié)果就是求它取最大時,W的值求出.W,就確定了新的空間下分離程度最大的方向。

    例如:右圖為最佳的轉(zhuǎn)化,W確定了中間這條分離線的方向,我們可以對Wˉˉ進行正規(guī)化處理,把正規(guī)化后比較小的W ^表示的分量去掉,保留最大的,最能代表原來信息的一個或一些分量,這樣就可以達到降維的目的。

    import numpy as np import pandas as pd from sklearn.discriminant_analysis import LinearDiscriminantAnalysis # X是二維數(shù)組 X=np.array([[-1,-1],[-2,-1],[-3,-2],[1,1],[2,1],[3,2]]) # Y是標注 Y=np.array([1,1,1,2,2,2]) # n_components=1降成1維 LinearDiscriminantAnalysis(n_components=1).fit_transform(X,Y)# 其實LDA降維以后我們也可以把它當個判別器(fisher_classifer判別器)來用 # 賦值到一個分類器上 clf=LinearDiscriminantAnalysis(n_components=1).fit(X,Y) # 輸入的數(shù)據(jù)也一定是二維的 clf.predict([[0.8,1]]) # 我們得到個分類

    ?


    (4)特征衍生:現(xiàn)有特征進行某些組合,生成新的具有含義的特征。

    我們通常采集到的數(shù)據(jù)的特征維度不會很大,而且直接采集到的特征并不一定能完全體現(xiàn)數(shù)據(jù)的全部信息,需要通過已有的數(shù)據(jù)組合發(fā)現(xiàn)新的含義。

    常用方法:第一,可以求時間差等;第三,經(jīng)常會進入常識性特征因素。

    例如:某電商網(wǎng)站用戶購買產(chǎn)品的列表

    ?通過衍生可以建立起用戶與商品的一些關系,這個思路也是推薦系統(tǒng)中擴維的一種主要方法。

    ?

    四,特征監(jiān)控

    如果我們建立的模型需要長期使用,隨著時間的流逝,可用的數(shù)據(jù)集會越來越多,同時在更多未知情況下,模型的效果可能會有變化,參數(shù)也可能需要重新矯正,這就需要我們對模型,對特征的契合程度進行不斷地監(jiān)控。

    (1)現(xiàn)有特征:是不是依然對我們的數(shù)據(jù)任務有積極的作用。?

    (2)新特征:探索新特征是不是有助于對提高效果或者更能代表我們的數(shù)據(jù)任務目標。

    總結(jié):不同的模型需要不同的處理方式。同樣,數(shù)據(jù)分布、數(shù)據(jù)特點不同,不同的處理方式,表現(xiàn)出的效果不同。要多次嘗試,根據(jù)經(jīng)驗,使用些針對某些領域比較常用的模型和算法。

    ?

    總結(jié)

    以上是生活随笔為你收集整理的python数据分析新手入门课程学习——(五)特征工程概述(数据预处理)(来源:慕课网)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。