1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【機(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)用場景:數(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)的朋友。",
                    "從一線城市到三線城市,從寶媽到職場人,從職場到體制內(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)的朋友。",
                    "從一線城市到三線城市,從寶媽到職場人,從職場到體制內(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)的朋友。",
                    "從一線城市到三線城市,從寶媽到職場人,從職場到體制內(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ù)場景。

        標(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ù)場景
            :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ù)場景。

        特征降維

        目標(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ù)測會(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)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            无码社区| 抽插熟妇 | 成人永久免费视频 | 夜夜嗨国产精品粉嫩久久 | 他扒开内裤把舌头进去添 | 天堂中文字幕在线观看 | 中文字幕无码一区二区三区一本久 | 爆操巨乳美女 | 97人人操 | 日韩OL丝袜无码AV啪啪 |