<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【機(jī)器學(xué)習(xí)】快速入門特征工程

          共 16170字,需瀏覽 33分鐘

           ·

          2021-08-17 13:55

          點(diǎn)擊關(guān)注,與你共同成長!



          目錄

          • 數(shù)據(jù)集

            • 可用數(shù)據(jù)集

            • sklearn數(shù)據(jù)集

          • 特征提取

            • 字典

            • 文本

          • 特征預(yù)處理

            • 歸一化
            • 標(biāo)準(zhǔn)化
            • 無量綱化
          • 特征降維

            • 特征選擇

            • 主成分分析(PCA降維)

          數(shù)據(jù)集

          下面列舉了一些示例來說明哪些內(nèi)容能算作數(shù)據(jù)集:

          • 包含某些數(shù)據(jù)的表格或 CSV 文件

          • 組織有序的表格集合

          • 采用專有格式的文件,其中包含數(shù)據(jù)

          • 可共同構(gòu)成某個(gè)有意義數(shù)據(jù)集的一組文件

          • 包含其他格式的數(shù)據(jù)的結(jié)構(gòu)化對(duì)象,您可能希望將其加載到特殊工具中進(jìn)行處理

          • 捕獲數(shù)據(jù)的圖像

          • 與機(jī)器學(xué)習(xí)相關(guān)的文件,如經(jīng)過訓(xùn)練的參數(shù)或神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)定義

          • 任何看來像數(shù)據(jù)集的內(nèi)容

          sklearn是一個(gè)Python第三方提供的非常強(qiáng)力的機(jī)器學(xué)習(xí)庫,它包含了從數(shù)據(jù)預(yù)處理到訓(xùn)練模型的各個(gè)方面。在實(shí)戰(zhàn)使用scikit-learn中可以極大的節(jié)省我們編寫代碼的時(shí)間以及減少我們的代碼量,使我們有更多的精力去分析數(shù)據(jù)分布,調(diào)整模型和修改超參。(sklearn為包名)

          特征提取

          目標(biāo)

          • 應(yīng)用DictVectorizer實(shí)現(xiàn)對(duì)類別特征進(jìn)行數(shù)值化、離散化

          • 應(yīng)用CountVectorizer實(shí)現(xiàn)對(duì)文本特征進(jìn)行數(shù)值化

          • 應(yīng)用TfidfVectorizer實(shí)現(xiàn)對(duì)文本特征進(jìn)行數(shù)值化

          • 說出兩種文本特征提取的方式區(qū)別

          定義

          特征提取是將任意數(shù)據(jù)(如文本或圖像)轉(zhuǎn)換為可用于機(jī)器學(xué)習(xí)的數(shù)字特征

          注:特征值化是為了計(jì)算機(jī)更好的去理解數(shù)據(jù)

          • 字典特征提取(特征離散化)

          • 文本特征提取

          • 圖像特征提?。ㄉ疃葘W(xué)習(xí))

          特征提取API

          sklearn.feature_extraction

          字典特征提取

          作用:對(duì)字典數(shù)據(jù)進(jìn)行特征值化

          • sklearn.feature_extraction.DictVectorizer(sparse=True,…)
            • DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器,返回值:返回sparse矩陣
            • DictVectorizer.inverse_transform(X) X:array數(shù)組或者sparse矩陣 返回值:轉(zhuǎn)換之前數(shù)據(jù)格式
            • DictVectorizer.get_feature_names() 返回類別名稱

          應(yīng)用

          對(duì)以下數(shù)據(jù)進(jìn)行特征提取

              data = [{'city''北京''temperature'100}, {'city''上海''temperature'60}, {'city''深圳''temperature'30}]

          流程分析

          • 實(shí)例化類DictVectorizer

          • 調(diào)用fit_transform方法輸入數(shù)據(jù)并轉(zhuǎn)換(注意返回格式)

          def dict_demo():
              """
              字典特征值提取
              :return:
              """

              data = [{'city''北京''temperature'100}, {'city''上海''temperature'60}, {'city''深圳''temperature'30}]
              # 1. 實(shí)例化一個(gè)轉(zhuǎn)換器   默認(rèn)返回 sparse矩陣  將非0值按位置表示出來 以節(jié)省內(nèi)存 提高加載效率
              transfer = DictVectorizer(sparse=False)

              # 應(yīng)用場(chǎng)景:數(shù)據(jù)集中類別特征值較多;將數(shù)據(jù)集的特征-》字典類型;DictVectorizer轉(zhuǎn)換;本身拿到的就是字典

              # 2. 調(diào)用fit_transform()
              data_new = transfer.fit_transform(data)
              print("data_new:\n", data_new)
              print("特征名字:\n", transfer.get_feature_names())
              return None

          注意觀察沒有加上sparse=False參數(shù)的結(jié)果

          這個(gè)結(jié)果并不是想要看到的,所以加上參數(shù),得到想要的結(jié)果,在這里把這個(gè)處理數(shù)據(jù)的技巧用專業(yè)的稱呼"one-hot"編碼。

          總結(jié)

          對(duì)于特征當(dāng)中存在類別信息的都會(huì)做one-hot編碼處理

          文本特征提取

          作用:對(duì)文本數(shù)據(jù)進(jìn)行特征值化

          • sklearn.feature_extraction.text.CountVectorizer(stop_words=[])

            • 返回詞頻矩陣
          • CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代對(duì)象 返回值:返回sparse矩陣

          • CountVectorizer.inverse_transform(X) X:array數(shù)組或者sparse矩陣 返回值:轉(zhuǎn)換之前數(shù)據(jù)格

          • CountVectorizer.get_feature_names() 返回值:單詞列表

          • sklearn.feature_extraction.text.TfidfVectorizer

          應(yīng)用

          對(duì)以下數(shù)據(jù)進(jìn)行特征提取

          data = ["life is short, i like python""life is too long i dislike python"]

          流程分析

          • 實(shí)例化類CountVectorizer

          • 調(diào)用fit_transform方法輸入數(shù)據(jù)并轉(zhuǎn)換 (注意返回格式,利用toarray()進(jìn)行sparse矩陣轉(zhuǎn)換array數(shù)組)

          def count_demo():
              """
              文本特征值抽取
              :return:
              """

              data = ["life is short, i like python""life is too long i dislike python"]
              # 1、實(shí)例化一個(gè)轉(zhuǎn)換器類
              transfer = CountVectorizer()
              # 演示停用詞
              # transfer = CountVectorizer(stop_words=["is", "too"])
              data_new = transfer.fit_transform(data)

              print("data_new:\n", data_new.toarray())
              print("特征名字:\n", transfer.get_feature_names())
              # 2、調(diào)用fit_transform

              return None

          問題:如果我們將數(shù)據(jù)替換成中文?

          發(fā)現(xiàn)英文默認(rèn)是以空格分開的。其實(shí)就達(dá)到了一個(gè)分詞的效果,所以我們要對(duì)中文進(jìn)行分詞處理

          下面代碼需要提前把文本做好空格間隙

          def count_chinese_demo():
              """
              中文文本特征值抽取
              :return:
              """

              data = ["我 愛 北京 天安門""天安門 上 太陽 升"]
              data2 = ["我愛北京天安門""天安門上太陽升"]
              # 1、實(shí)例化一個(gè)轉(zhuǎn)換器類
              transfer = CountVectorizer()
              data_new = transfer.fit_transform(data)

              print("data_new:\n", data_new.toarray())
              print("特征名字:\n", transfer.get_feature_names())
              # 2、調(diào)用fit_transform

              return None

          更好的處理方式見下方案

          jieba分詞處理

          • jieba.cut()
            • 返回詞語組成的生成器

          需要安裝下jieba庫

          pip install jieba

          案例分析

              data = ["在過去兩個(gè)月里,我和60多位小伙伴進(jìn)行了1對(duì)1的一小時(shí)溝通;",
                      "TA絕大多數(shù)是想要嘗試副業(yè)變現(xiàn)的朋友。",
                      "從一線城市到三線城市,從寶媽到職場(chǎng)人,從職場(chǎng)到體制內(nèi)。"]

          分析

          • 準(zhǔn)備句子,利用jieba.cut進(jìn)行分詞

          • 實(shí)例化CountVectorizer

          • 將分詞結(jié)果變成字符串當(dāng)作fit_transform的輸入值

          def count_word(text):
              """
              進(jìn)行中文分詞 我愛北京天安門-》我 愛 北京 天安門
              :param text:
              :return:
              """

              a = " ".join(list(jieba.cut(text)))
              print(a)
              return a


          def count_chinese_demo2():
              """
              中文文本特征值抽取 自動(dòng)分詞
              :return:
              """

              data = ["在過去兩個(gè)月里,我和60多位小伙伴進(jìn)行了1對(duì)1的一小時(shí)溝通;",
                      "TA絕大多數(shù)是想要嘗試副業(yè)變現(xiàn)的朋友。",
                      "從一線城市到三線城市,從寶媽到職場(chǎng)人,從職場(chǎng)到體制內(nèi)。"]
              # 1、實(shí)例化一個(gè)轉(zhuǎn)換器類
              transfer = CountVectorizer(stop_words=["從寶媽"])
              data_new = transfer.fit_transform(count_word(item) for item in data)

              print("data_new:\n", data_new.toarray())
              print("特征名字:\n", transfer.get_feature_names())
              # 2、調(diào)用fit_transform

              return None

          問題:該如何處理某個(gè)詞或短語在多篇文章中出現(xiàn)的次數(shù)高這種情況?

          Tf-idf文本特征提取

          TF-IDF的主要思想是:如果某個(gè)詞或短語在一篇文章中出現(xiàn)的概率高,并且在其他文章中很少出現(xiàn),則認(rèn)為此詞或者短語具有很好的類別區(qū)分能力,適合用來分類。

          TF-IDF作用:用以評(píng)估一字詞對(duì)于一個(gè)文件集或一個(gè)語料庫中的其中一份文件的重要程度。

          公式

          詞頻(term frequency,tf)指的是某一個(gè)給定的詞語在該文件中出現(xiàn)的頻率

          逆向文檔頻率(inverse document frequency,idf)是一個(gè)詞語普遍重要性的度量。某一特定詞語的idf,可以由總文件數(shù)目除以包含該詞語之 文件的數(shù)目,再將得到的商取以10為底的對(duì)數(shù)得到

          最終得出結(jié)果可以理解為重要程度。

          注:假如一篇文件的總詞語數(shù)是100個(gè),而詞語"非常"出現(xiàn)了5次,那么"非常"一詞在該文件中的詞頻就是5/100=0.05。而計(jì)算文件頻率(IDF)的方法是以文件集的文件總數(shù),除以出現(xiàn)"非常"一詞的文件數(shù)。所以,如果"非常"一詞在1,000份文件出現(xiàn)過,而文件總數(shù)是10,000,000份的話,其逆向文件頻率就是lg(10,000,000 / 1,0000)=3。最后"非常"對(duì)于這篇文檔的tf-idf的分?jǐn)?shù)為0.05 * 3=0.15

          案例

          def tfidf_demo():
              """
              用TF-IDF方法進(jìn)行文本特征值抽取
              :return:
              """

              data = ["在過去兩個(gè)月里,我和60多位小伙伴進(jìn)行了1對(duì)1的一小時(shí)溝通;",
                      "TA絕大多數(shù)是想要嘗試副業(yè)變現(xiàn)的朋友。",
                      "從一線城市到三線城市,從寶媽到職場(chǎng)人,從職場(chǎng)到體制內(nèi)。"]
              transfer = TfidfVectorizer(stop_words=["從寶媽"])
              data_new = transfer.fit_transform(count_word(item) for item in data)

              print("data_new:\n", data_new.toarray())
              print("特征名字:\n", transfer.get_feature_names())
              return None

          Tf-idf的重要性

          分類機(jī)器學(xué)習(xí)算法進(jìn)行文章分類中前期數(shù)據(jù)處理方式

          特征預(yù)處理

          目標(biāo)

          • 了解數(shù)值型數(shù)據(jù)、類別型數(shù)據(jù)特點(diǎn)

          • 應(yīng)用MinMaxScaler實(shí)現(xiàn)對(duì)特征數(shù)據(jù)進(jìn)行歸一化

          • 應(yīng)用StandardScaler實(shí)現(xiàn)對(duì)特征數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化

          什么是特征預(yù)處理

          特征預(yù)處理:通過一些轉(zhuǎn)換函數(shù)將特征數(shù)據(jù)轉(zhuǎn)換成更加適合算法模型的特征數(shù)據(jù)過程

          可以通過上面那張圖來理解

          包含內(nèi)容

          數(shù)值型數(shù)據(jù)的無量綱化:

          • 歸一化

          • 標(biāo)準(zhǔn)化

          特征預(yù)處理API

          sklearn.preprocessing

          為什么我們要進(jìn)行歸一化/標(biāo)準(zhǔn)化?

          特征的單位或者大小相差較大,或者某特征的方差相比其他的特征要大出幾個(gè)數(shù)量級(jí),容易影響(支配)目標(biāo)結(jié)果,使得一些算法無法學(xué)習(xí)到其它的特征

          我們需要用到一些方法進(jìn)行無量綱化,使不同規(guī)格的數(shù)據(jù)轉(zhuǎn)換到同一規(guī)格

          歸一化

          定義

          通過對(duì)原始數(shù)據(jù)進(jìn)行變換把數(shù)據(jù)映射到(默認(rèn)為[0,1])之間

          公式

          作用于每一列,max為一列的最大值,min為一列的最小值,那么X’’為最終結(jié)果,mx,mi分別為指定區(qū)間值默認(rèn)mx為1、mi為0

          API

          • sklearn.preprocessing.MinMaxScaler (feature_range=(0,1)… )
            • X:numpy array格式的數(shù)據(jù)[n_samples,n_features]
            • MinMaxScalar.fit_transform(X)
            • 返回值:轉(zhuǎn)換后的形狀相同的array

          數(shù)據(jù)計(jì)算

          我們對(duì)以下數(shù)據(jù)進(jìn)行運(yùn)算,在dating.txt中。保存的就是之前的約會(huì)對(duì)象數(shù)據(jù)

          milage,Liters,Consumtime,target
          40920,8.326976,0.953952,3
          14488,7.153469,1.673904,2
          26052,1.441871,0.805124,1
          75136,13.147394,0.428964,1
          38344,1.669788,0.134296,1

          分析

          • 實(shí)例化MinMaxScalar

          • 通過fit_transform轉(zhuǎn)換

          def minmax_demo():
              """
              歸一化
              :return:
              """

              # 1、獲取數(shù)據(jù)
              data = pd.read_csv("dating.txt")
              data = data.iloc[:, :3]
              print(data)

              # 2、實(shí)例化一個(gè)轉(zhuǎn)換器類
              transform = MinMaxScaler()
              # transform = MinMaxScaler(feature_range=[2, 3])

              # 3、調(diào)用fit_transform
              data_new = transform.fit_transform(data)
              print("data_new:\n", data_new)
              return None

          歸一化總結(jié)

          注意最大值最小值是變化的,另外,最大值與最小值非常容易受異常點(diǎn)影響,所以這種方法魯棒性較差,只適合傳統(tǒng)精確小數(shù)據(jù)場(chǎng)景。

          標(biāo)準(zhǔn)化

          定義

          通過對(duì)原始數(shù)據(jù)進(jìn)行變換把數(shù)據(jù)變換到均值為0,標(biāo)準(zhǔn)差為1范圍內(nèi)

          公式

          作用于每一列,mean為平均值,σ為標(biāo)準(zhǔn)差

          所以回到剛才異常點(diǎn)的地方,我們?cè)賮砜纯礃?biāo)準(zhǔn)化

          • 對(duì)于歸一化來說:如果出現(xiàn)異常點(diǎn),影響了最大值和最小值,那么結(jié)果顯然會(huì)發(fā)生改變

          • 對(duì)于標(biāo)準(zhǔn)化來說:如果出現(xiàn)異常點(diǎn),由于具有一定數(shù)據(jù)量,少量的異常點(diǎn)

          • 對(duì)于平均值的影響并不大,從而方差改變較小。

          API

          • sklearn.preprocessing.StandardScaler( )
            • X:numpy array格式的數(shù)據(jù)[n_samples,n_features]
            • 處理之后每列來說所有數(shù)據(jù)都聚集在均值0附近標(biāo)準(zhǔn)差差為1
            • StandardScaler.fit_transform(X)
            • 返回值:轉(zhuǎn)換后的形狀相同的array

          數(shù)據(jù)計(jì)算

          同樣對(duì)上面的數(shù)據(jù)進(jìn)行處理

          [[90,2,10,40],
          [60,4,15,45],
          [75,3,13,46]]

          分析

          • 實(shí)例化StandardScaler

          • 通過fit_transform轉(zhuǎn)換

          def stand_demo():
              """
              進(jìn)行標(biāo)準(zhǔn)化
              在已有樣本足夠多的情況下,適合現(xiàn)在嘈雜大數(shù)據(jù)場(chǎng)景
              :return:
              """

              # 1、獲取數(shù)據(jù)
              data = pd.read_csv("dating.txt")
              data = data.iloc[:, :3]
              print(data)

              # 2、實(shí)例化一個(gè)轉(zhuǎn)換器類
              transform = StandardScaler()

              # 3、調(diào)用fit_transform
              data_new = transform.fit_transform(data)
              print("data_new:\n", data_new)
              return None

          標(biāo)準(zhǔn)化總結(jié)

          在已有樣本足夠多的情況下比較穩(wěn)定,適合現(xiàn)代嘈雜大數(shù)據(jù)場(chǎng)景。

          特征降維

          目標(biāo)

          • 知道特征選擇的嵌入式、過濾式以及包裹氏三種方式

          • 應(yīng)用VarianceThreshold實(shí)現(xiàn)刪除低方差特征

          • 了解相關(guān)系數(shù)的特點(diǎn)和計(jì)算

          • 應(yīng)用相關(guān)性系數(shù)實(shí)現(xiàn)特征選擇

          降維

          降維是指在某些限定條件下,降低隨機(jī)變量(特征)個(gè)數(shù),得到一組“不相關(guān)”主變量的過程

          • 降低隨機(jī)變量的個(gè)數(shù)

          • 相關(guān)特征(correlated feature):相對(duì)濕度與降雨量之間的相關(guān)等等

          正是因?yàn)樵谶M(jìn)行訓(xùn)練的時(shí)候,我們都是使用特征進(jìn)行學(xué)習(xí)。如果特征本身存在問題或者特征之間相關(guān)性較強(qiáng),對(duì)于算法學(xué)習(xí)預(yù)測(cè)會(huì)影響較大

          降維的兩種方式

          • 特征選擇

          • 主成分分析(可以理解一種特征提取的方式)

          特征選擇

          什么是特征選擇

          定義: 數(shù)據(jù)中包含冗余或無關(guān)變量(或稱特征、屬性、指標(biāo)等),旨在從原有特征中找出主要特征。

          方法:

          • Filter(過濾式):主要探究特征本身特點(diǎn)、特征與特征和目標(biāo)值之間關(guān)聯(lián)

            • 方差選擇法:低方差特征過濾
            • 相關(guān)系數(shù)
          • Embedded (嵌入式):算法自動(dòng)選擇特征(特征與目標(biāo)值之間的關(guān)聯(lián))

            • 決策樹:信息熵、信息增益
            • 正則化:L1、L2
            • 深度學(xué)習(xí):卷積等
          • Wrapper (包裹式)

          模塊

          sklearn.feature_selection

          過濾式

          低方差特征過濾

          刪除低方差的一些特征,前面講過方差的意義。再結(jié)合方差的大小來考慮這個(gè)方式的角度。

          • 特征方差?。耗硞€(gè)特征大多樣本的值比較相近

          • 特征方差大:某個(gè)特征很多樣本的值都有差別

          API

          • sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
            • X:numpy array格式的數(shù)據(jù)[n_samples,n_features]
            • 返回值:訓(xùn)練集差異低于threshold的特征將被刪除。默認(rèn)值是保留所有非零方差特征,即刪除所有樣本中具有相同值的特征。
            • 刪除所有低方差特征
            • Variance.fit_transform(X)

          數(shù)據(jù)計(jì)算

          我們對(duì)某些股票的指標(biāo)特征之間進(jìn)行一個(gè)篩選

          一共這些特征

          pe_ratio,pb_ratio,market_cap,return_on_asset_net_profit,du_return_on_equity,ev,earnings_per_share,revenue,total_expense
          index,pe_ratio,pb_ratio,market_cap,return_on_asset_net_profit,du_return_on_equity,ev,earnings_per_share,revenue,total_expense,date,return
          0,000001.XSHE,5.9572,1.1818,85252550922.0,0.8008,14.9403,1211444855670.0,2.01,20701401000.0,10882540000.0,2012-01-31,0.027657228229937388
          1,000002.XSHE,7.0289,1.588,84113358168.0,1.6463,7.8656,300252061695.0,0.326,29308369223.2,23783476901.2,2012-01-31,0.08235182370820669
          2,000008.XSHE,-262.7461,7.0003,517045520.0,-0.5678,-0.5943,770517752.56,-0.006,11679829.03,12030080.04,2012-01-31,0.09978900335112327
          3,000060.XSHE,16.476,3.7146,19680455995.0,5.6036,14.617,28009159184.6,0.35,9189386877.65,7935542726.05,2012-01-31,0.12159482758620697
          4,000069.XSHE,12.5878,2.5616,41727214853.0,2.8729,10.9097,81247380359.0,0.271,8951453490.28,7091397989.13,2012-01-31,-0.0026808154146886697
          def variance_demo():
              """
              過濾低方差特征
              :return:
              "
          ""
              # 1、獲取數(shù)據(jù)
              data = pd.read_csv("factor_returns.csv")
              data = data.iloc[:, 1: -2]
              print(data)

              # 2、實(shí)例化一個(gè)轉(zhuǎn)換器
              transfer = VarianceThreshold(threshold=5)

              # 3、調(diào)用fit_transform
              data_new = transfer.fit_transform(data)
              print("data_new", data_new, data_new.shape)
              return None


          if __name__ == '__main__':
              # 低方差特征過濾
              variance_demo()

          相關(guān)系數(shù)

          皮爾遜相關(guān)系數(shù)(Pearson Correlation Coefficient): 反映變量之間相關(guān)關(guān)系密切程度的統(tǒng)計(jì)指標(biāo)

          公式計(jì)算案例(了解,不用記憶)

          公式:

          比如說我們計(jì)算年廣告費(fèi)投入與月均銷售額

          = 0.9942

          所以我們最終得出結(jié)論是廣告投入費(fèi)與月平均銷售額之間有高度的正相關(guān)關(guān)系。

          特點(diǎn)

          相關(guān)系數(shù)的值介于–1與+1之間,即–1≤ r ≤+1。其性質(zhì)如下:

          • 當(dāng)r>0時(shí),表示兩變量正相關(guān),r<0時(shí),兩變量為負(fù)相關(guān)

          • 當(dāng)|r|=1時(shí),表示兩變量為完全相關(guān),當(dāng)r=0時(shí),表示兩變量間無相關(guān)關(guān)系

          • 當(dāng)0<|r|<1時(shí),表示兩變量存在一定程度的相關(guān)。且|r|越接近1,兩變量間線性關(guān)系越密切;|r|越接近于0,表示兩變量的線性相關(guān)越弱

          一般可按三級(jí)劃分:|r|<0.4為低度相關(guān);0.4≤|r|<0.7為顯著性相關(guān);0.7≤|r|<1為高度線性相關(guān)

          這個(gè)符號(hào):|r|為r的絕對(duì)值, |-5| = 5

          API

          from scipy.stats import pearsonr
          x : (N,) array_like
          y : (N,) array_like Returns: (Pearson’s correlation coefficient, p-value)

          主成分分析

          目標(biāo)

          • 應(yīng)用PCA實(shí)現(xiàn)特征的降維

          • 應(yīng)用:用戶與物品類別之間主成分分析

          什么是主成分分析(PCA)

          定義:高維數(shù)據(jù)轉(zhuǎn)化為低維數(shù)據(jù)的過程,在此過程中可能會(huì)舍棄原有數(shù)據(jù)、創(chuàng)造新的變量

          作用:是數(shù)據(jù)維數(shù)壓縮,盡可能降低原數(shù)據(jù)的維數(shù)(復(fù)雜度),損失少量信息。

          應(yīng)用:回歸分析或者聚類分析當(dāng)中

          API

          • sklearn.decomposition.PCA(n_components=None)
            • 小數(shù):表示保留百分之多少的信息
            • 整數(shù):減少到多少特征
            • 將數(shù)據(jù)分解為較低維數(shù)空間
            • n_components:
            • PCA.fit_transform(X) X:numpy array格式的數(shù)據(jù)[n_samples,n_features]
            • 返回值:轉(zhuǎn)換后指定維度的array

          數(shù)據(jù)計(jì)算

          [[2,8,4,5],
          [6,3,0,8],
          [5,4,9,1]]
          def pca():
              """
              主成分分析進(jìn)行降維
              :return:
              """

              # 信息保留70%
              pca = PCA(n_components=0.7)
              data = pca.fit_transform([[2845], [6308], [5491]])
              print(data)

              return None

          案例:探究用戶對(duì)物品類別的喜好細(xì)分降維

          數(shù)據(jù)

          • order_products__prior.csv:訂單與商品信息

            • 字段:order_id, product_id, add_to_cart_order, reordered
          • products.csv:商品信息

            • 字段:product_id, product_name, aisle_id, department_id
          • orders.csv:用戶的訂單信息

            • 字段:order_id,user_id,eval_set,order_number,….
          • aisles.csv:商品所屬具體物品類別

            • 字段:aisle_id, aisle

          分析

          • 合并表,使得user_id與aisle在一張表當(dāng)中

          • 進(jìn)行交叉表變換

          • 進(jìn)行降維

          def pca_case_study():
              """
              主成分分析案例
              :return: 
              """

              # 去讀四張表的數(shù)據(jù)
              prior = pd.read_csv("./instacart/order_products__prior.csv")
              products = pd.read_csv("./instacart/products.csv")
              orders = pd.read_csv("./instacart/orders.csv")
              aisles = pd.read_csv("./instacart/aisles.csv")

              print(prior)

              # 合并四張表
              mt = pd.merge(prior, products, on=['product_id''product_id'])
              mt1 = pd.merge(mt, orders, on=['order_id''order_id'])
              mt2 = pd.merge(mt1, aisles, on=['aisle_id''aisle_id'])
              
              # pd.crosstab 統(tǒng)計(jì)用戶與物品之間的次數(shù)關(guān)系(統(tǒng)計(jì)次數(shù))
              cross = pd.crosstab(mt2['user_id'], mt2['aisle'])

              # PCA進(jìn)行主成分分析
              pc = PCA(n_components=0.95)
              data_new = pc.fit_transform(cross)
              print("data_new:\n", data_new.shape)

              return None

          代碼地址:https://gitee.com/coding-tjise/coding-tjise
          部分?jǐn)?shù)據(jù)集:回復(fù)"特征工程"關(guān)鍵字獲取


          搭建深度學(xué)習(xí)環(huán)境之一:安裝Docker

          累計(jì)連續(xù)簽到設(shè)計(jì)和實(shí)現(xiàn)

          翻譯翻譯:什么叫架構(gòu)?


          以上,便是今天的分享,希望大家喜歡,覺得內(nèi)容不錯(cuò)的,歡迎「分享」「」或者點(diǎn)擊「在看」支持,謝謝各位。

          瀏覽 70
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  五月丁香亚洲无码 | 黄色a在线 | 手机能播放的国产操逼视频 | 91清清草视频 | 8x8x成人免费视频入口 |