AI學習---特徵工程【特徵抽取、特徵預處理、特徵降維】

學習框架

image

特徵工程(Feature Engineering)

   數據和特徵決定了機器學習的上限,而模型和算法只是逼近這個上限而已html

image

什麼是特徵工程:java

幫助咱們使得算法性能更好發揮性能而已python

image

sklearn主要用於特徵工程
pandas主要用於數據清洗、數據處理算法

image

特徵工程包含以下3個內容:編程

      一、特徵抽取/特徵提取數組

             |__>字典特徵抽取,應用DiceVectorizer實現對類別特徵進行數值化、離散化瀏覽器

             |__>文本特徵抽取,應用CounterVertorize/TfIdfVectorize實現對文本特徵數值化app

             |__>圖像特徵抽取(深度學習)框架

      二、特徵預處理機器學習

              |_>歸一化,應用MaxmixScaler,根據最小最大值進行放縮,默認範圍0-1,容易受到異常值的影響,穩定性差,適合小規模

              |_>標準化,應用StandardScaler, 數據處理到指定的範圍內,默認0~1

      三、特徵降維

               |_>特徵選擇

               |_>PCI(主要內容分析)

 

一、特徵抽取/特徵提取

        咱們常說的機器學習算法實際上就是咱們統計學上的統計方法也就是咱們數學上的數學公式

                           即 機器學習算法--》統計方法--》數學公式

        字典特徵抽取的應用場景:
            1)pclass, sex 數據集當中類別特徵比較多
                    一、將數據集的特徵 轉換爲字典類型
                    二、利用DictVectorizer轉換爲二維數組
            2)自己拿到的數據就是字典類型

image

1- 字典特徵提取:

      當咱們調用sklearn.feature_extraction.DictVectorizer(sparse=True,…)的時候,實際上就是初始化了一個父類的轉換器對象,而後調用實例進行fit_transform(X),進行字典和數值的轉換。

image

      (下圖)有多少行數據就有多少個向量(有方向和大小),向量在計算機中以矩陣存儲(二維數組),而矩陣的行和列均可以看作一個一維數組。下圖中一行數據能夠看作一個向量,n個樣本有n個向量,即將字典轉換爲了計算機識別的二維數組。每個樣本有2個特徵(城市+temperature),正常應該返回一個3行2列的矩陣,可是字典特徵抽取後,樣本量沒有變(3個樣本),可是特徵量變成了4個(當特徵中有類別的時候,要想表示成數值,又想要公平的表示數據,咱們採用one-hot編碼,有3個類別,就佔用3列,若是是北京,則第二列的特徵值就是1,最後添加上temperature就是4個特徵了)。

image

字典特徵抽取DEMO:

from sklearn.feature_extraction.dict_vectorizer import DictVectorizer

# 字典特徵提取
def dic_demo():
    data = [{'city': '北京', 'temperature': 100},
            {'city': '上海', 'temperature': 60},
            {'city': '深圳', 'temperature': 30}]
    # 一、實例化一個轉換器對象
    # transform = DictVectorizer(sparse=True)  # 默認開啓稀疏矩陣
    transform = DictVectorizer(sparse=False)   # 默認sparse=True,
    # 二、調用fit_transform()
    new_data = transform.fit_transform(data)
    # 三、獲取特徵名稱
    print("特徵名字:\n", transform.get_feature_names()) # 特徵名字:['city=上海', 'city=北京', 'city=深圳', 'temperature']

    print('轉換後的結果:\n', new_data)

    '''
     # sparse=True時候的new_data的值:返回的new_data是一個sparse的稀疏矩陣
      (0, 1)	1.0
      (0, 3)	100.0
      (1, 0)	1.0
      (1, 3)	60.0
      (2, 2)	1.0
      (2, 3)	30.0


     # sparse=True時候的new_data的值,返回的是一個二維數組

      [[  0.   1.   0. 100.]
       [  1.   0.   0.  60.]
       [  0.   0.   1.  30.]]

      # 總結:
           稀疏矩陣將非零值按位置表示出來,這樣作能夠節省內存 - 提升加載效率
    '''

if __name__ == '__main__':
    dic_demo()

結果截圖:

image

附:  one-hot編碼:

      對特徵中的類別信息,爲了公平的表示每一組樣本數據,咱們處理的時候,就是根據類別進行劃分,樣本中幾個類別就有幾列,是這個數據則置該列的數值爲1,不然爲0

image

  2- 文本特徵提取:

  文本特徵提取就是將單詞、字母、短語做爲主要的特徵詞進行特徵提取

  能夠利用以下方法統計:

       1. from sklearn.feature_extraction.text import CountVectorizer  ==》 根據分詞進行數量統計繼續文本分類

       2. from sklearn.feature_extraction.text import TfidfVectorizer    ==》 根據文章出現的詞的佔比(重要程度)進行文本分類

image

CountVectorizer:統計的是文本中出現的特徵詞次數,stop_words停用的停詞表,toarray()能夠轉換爲二維數組
image
 
文本特徵提取—>英文的測試DEMO
from sklearn.feature_extraction.text import CountVectorizer

# 文本特徵提取
def text_count_demo():
    data = ["life is short,i like like python", "life is too long, i dislike python"]
    # 一、實例化一個轉換器類
    transfer = CountVectorizer()
    # transfer = CountVectorizer(stop_words=["is", "too"])
    '''
    不添加stop_words的效果:transfer = CountVectorizer()
        data_new:
         [[0 1 1 2 0 1 1 0]
         [1 1 1 0 1 1 0 1]]
        特徵名字:
         ['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
    
    
    添加stop_words的效果: transfer = CountVectorizer(stop_words=["is", "too"])
        data_new:
         [[0 1 2 0 1 1]
         [1 1 0 1 1 0]]
        特徵名字:
         ['dislike', 'life', 'like', 'long', 'python', 'short']
            
    '''

    # 二、調用fit_transform
    data_new = transfer.fit_transform(data)
    # data_new返回的是一個sparse矩陣,
    print("矩陣_data_new:\n", data_new)
    # data_new.toarray()返回的是一個二維數組
    print("數組_data_new:\n", data_new.toarray())
    '''
        矩陣_data_new:
              (0, 5)	1
              (0, 3)	2
              (0, 6)	1
              (0, 1)	1
              (0, 2)	1
              (1, 0)	1
              (1, 4)	1
              (1, 7)	1
              (1, 5)	1
              (1, 1)	1
          (1, 2)	1
          
        數組_data_new.toarray():
             [[0 1 1 2 0 1 1 0]
             [1 1 1 0 1 1 0 1]]
    '''
    print("特徵名字:\n", transfer.get_feature_names())

    return None


if __name__ =='__main__':
    text_count_demo()

文本特徵提取—>中文的手動分詞DEMO效果(這裏是手動用空格進行的中文分詞,麻煩):

from sklearn.feature_extraction.text import CountVectorizer
# 中文的須要進行分詞,不然是以整句做爲分詞的
def chinese_text_count_demo():
    data = ["我愛北京天安門", "天安門上太陽升"]
    # data = ["我 愛 北京 天安門", "天安門 上 太陽 升"]  # 添加了空格的中文分詞
    '''
    未添加空格的中文分詞:
        data_new:
         [[0 1]
         [1 0]]
        特徵名字:
         ['天安門上太陽升', '我愛北京天安門'] 
         
    添加了空格的中文分詞:
         [[1 1 0]
         [0 1 1]]
        特徵名字:
         ['北京', '天安門', '太陽']
    
    '''
    # 一、實例化一個轉換器類
    transfer = CountVectorizer()

    # 二、調用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特徵名字:\n", transfer.get_feature_names())

    return None

if __name__ =='__main__':
    chinese_text_count_demo()

文本特徵提取—>中文的自動分詞統計的DEMO效果

from sklearn.feature_extraction.text import CountVectorizer
import jieba

# pip3 install jieba
# 利用jieba能夠進行jieba分詞
def cut_word(text):
    """
    進行中文分詞:"我愛北京天安門" --> "我 愛 北京 天安門"
    :param text:
    :return:
    """
    return " ".join(list(jieba.cut(text))) # jieba.cut(text)返回的是一個生成器對象,須要轉換爲迭代器


def auto_chinese_text_count_demo():
    data = ["一種仍是一種今天很殘酷,明天更殘酷,後天很美好,但絕對大部分是死在明天晚上,因此每一個人不要放棄今天。",
            "咱們看到的從很遠星系來的光是在幾百萬年以前發出的,這樣當咱們看到宇宙時,咱們是在看它的過去。",
            "若是隻用一種方式瞭解某樣事物,你就不會真正瞭解它。瞭解事物真正含義的祕密取決於如何將其與咱們所瞭解的事物相聯繫。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 一、實例化一個轉換器類
    transfer = CountVectorizer(stop_words=["一種", "因此"])

    # 二、調用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特徵名字:\n", transfer.get_feature_names())

    return None


if __name__ =='__main__':
    auto_chinese_text_count_demo()

image

附:」瞭解」在第三個數據中出現了4次。

CountVectorizer僅僅是根據特徵名字出現的次數進行的文本分類,若是一個文本中的語氣詞出現了不少次,那最終統計的結果也不是很合適

2-文本特徵抽取--TfidfVevtorizer

      寫在前面:TfidfVevtorizer對分類機器學習算法進行文章分類中前期數據處理很重要

    在某一個類別的文章中,某些詞出現的次數不少,可是在其餘類別的文章當中出現不多,咱們利用他們的重要程度進行分類,以下圖咱們就能看他們介紹的內容分別是共享車和經濟證券。

image

TfidfVevtorizer衡量的就是一個詞在文章中的重要程度

TfidfVevtorizer = TF + IDF

      --> TF   - 詞頻(term frequency,tf)
      --> IDF - 逆向文檔頻率(inverse document frequency, idf)

TF-IDF文本特徵提取:

image

舉個例子:

背景:
    假設現有兩個關鍵詞 「經濟」,「很是」。
    如今咱們的基礎數據是1000篇文章的語料庫。其中100篇文章"很是"一詞出現的頻率很高,10篇文章「經濟」一詞出現的頻率很高。
計算公式
    TF(詞頻)  = 出現的頻率/總詞數
    IDF(逆向文檔頻率)= log 10 文件總數目/包含該詞語的文件數目
    TF-IDF = TF * IDF
要求計算:
    現有兩篇文章
    文章A(100詞) : 10次「經濟」   TF-IDF:0.2
        tf: 10/100 = 0.1
        idf:lg 1000/10 = 2  
    文章B(100詞) : 10次「很是」   TF-IDF:0.1
        tf:10/100 = 0.1
        idf: log 10 1000/100 = 1

TF-IDF處理的API

image

TF-IDF處理的文本數據DEMO

from sklearn.feature_extraction.text import TfidfVectorizer
import jieba

# pip3 install jieba
# 利用jieba能夠進行jieba分詞
def cut_word(text):
    """
    進行中文分詞:"我愛北京天安門" --> "我 愛 北京 天安門"
    :param text:
    :return:
    """
    return " ".join(list(jieba.cut(text))) # jieba.cut(text)返回的是一個生成器對象,須要轉換爲迭代器


def tf_idf_demo():
    data = ["一種仍是一種今天很殘酷,明天更殘酷,後天很美好,但絕對大部分是死在明天晚上,因此每一個人不要放棄今天。",
            "咱們看到的從很遠星系來的光是在幾百萬年以前發出的,這樣當咱們看到宇宙時,咱們是在看它的過去。",
            "若是隻用一種方式瞭解某樣事物,你就不會真正瞭解它。瞭解事物真正含義的祕密取決於如何將其與咱們所瞭解的事物相聯繫。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 一、實例化一個轉換器類
    transfer = TfidfVectorizer(stop_words=["一種", "因此"])

    # 二、調用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特徵名字:\n", transfer.get_feature_names())

    return None

if __name__ =='__main__':
    tf_idf_demo()

image

二、特徵預處理

image

特徵預處理:

    經過一些轉換函數將特徵數據轉換爲更適合算法模型的特徵數據過程。

image

數值型數據的無量綱化(無量綱化,數學名詞,是不一樣規格的數據轉換到同一規格)

      --》 歸一化: 根據最小最大值進行放縮,默認範圍0-1,容易受到異常值的影響,穩定性差,只適合小規模的數據場景

      --》 標準化:  原始數據變化到0-1直接

特徵預處理API:

      sklearn.preprocessing

image

image

1. 歸一化

image

舉個例子:

image

image

image

image

歸一化的Demo

from sklearn.preprocessing import MinMaxScaler
import pandas as pd   # pandas是用於讀取文本文件


# 歸一化
def minmax_demo():
    """
    pandas 是基於NumPy 的一種工具,該工具是爲了解決數據分析任務而建立的。
    Pandas 歸入了大量庫和一些標準的數據模型,
    提供了高效地操做大型數據集所需的工具。
    pandas提供了大量能使咱們快速便捷地處理數據的函數和方法。
    """
    # 一、獲取數據
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]  # 目的是進行歸一化,不須要目標值,txt文件第四列值是target
    print("data:\n", data)   # 讀取的csv文件

    # 二、實例化一個轉換器類
    transfer = MinMaxScaler(feature_range=[2, 3]) # 默認的feature_range是[0, 1]

    # 三、調用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None


if __name__ == '__main__':
    minmax_demo()

image

dating.txt  ==> 詳見附件

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
72993,10.141740,1.032955,1
35948,6.830792,1.213192,3
42666,13.276369,0.543880,3
67497,8.631577,0.749278,1
35483,12.273169,1.508053,3
50242,3.723498,0.831917,1
63275,8.385879,1.669485,1
5569,4.875435,0.728658,2
51052,4.680098,0.625224,1
77372,15.299570,0.331351,1
43673,1.889461,0.191283,1
61364,7.516754,1.269164,1
69673,14.239195,0.261333,1
15669,0.000000,1.250185,2
28488,10.528555,1.304844,3
6487,3.540265,0.822483,2
37708,2.991551,0.833920,1
22620,5.297865,0.638306,2
28782,6.593803,0.187108,3
19739,2.816760,1.686209,2
36788,12.458258,0.649617,3
5741,0.000000,1.656418,2
28567,9.968648,0.731232,3
二、標準化

image

image

image

標準化的測試Demo

from sklearn.preprocessing import StandardScaler
import pandas as pd   # pandas是用於讀取文本文件


# 標準化
def standard_mode():
    """
    pandas 是基於NumPy 的一種工具,該工具是爲了解決數據分析任務而建立的。
    Pandas 歸入了大量庫和一些標準的數據模型,
    提供了高效地操做大型數據集所需的工具。
    pandas提供了大量能使咱們快速便捷地處理數據的函數和方法。
    """
    # 一、獲取數據
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]  # 目的是進行歸一化,不須要目標值,txt文件第四列值是target
    print("data:\n", data)   # 讀取的csv文件

    # 二、實例化一個轉換器類
    transfer = StandardScaler()  # 默認的feature_range是[0, 1]

    # 三、調用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None


if __name__ == '__main__':
    standard_mode()
另: dating.txt詳見附件

image

 

三、特徵降維

      降維實際上就是下降特徵的個數,最終的結果就是特徵和特徵之間不相關。

image

降維的2種方法

image

什麼是特徵選擇

image

特徵選擇的2種方法(過濾式 + 嵌入式)

image

特徵選擇的2種方式:

過濾式:

    方差選擇法: 能夠過濾掉低方差的數據,例如用鳥類是否能夠飛做爲特徵值是不合適的,此時的方差爲0。

    相關係數法:目標是去除冗餘,肯定特徵與特徵之間的相關性。

嵌入式:

    決策樹:

    正則化:

    深度學習:

降維方式一:特徵選擇--過濾式 --低方差過濾

image

刪除低方差特徵Demo

from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
import pandas as pd


def variance_demo():
    """
        過濾低方差特徵
        :return:
        """
    # 一、獲取數據
    data = pd.read_csv("factor_returns.csv")
    data = data.iloc[:, 1:-2]  # 全部行都要,列不顯示最後2行
    print("data:\n", data)

    # 二、實例化一個轉換器類
    transfer = VarianceThreshold(threshold=10)  # threshold表明臨界值爲10,默認爲0

    # 三、調用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new, data_new.shape)

    return None

if __name__ == '__main__':
    variance_demo()

image

factor_returns.csv  ==> 詳見附件

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
5,000100.XSHE,10.796,1.5219999999999998,17206724233.0,2.245,7.7394,66034033386.1,0.0974,43883757748.0,43092263405.0,2012-01-31,0.13795588072275808
6,000402.XSHE,8.1032,1.0078,18253291248.0,3.2233,10.3965,56511787330.1,0.6,7303544153.27,5440677926.67,2012-01-31,0.08457869004968227
7,000413.XSHE,192.5234,18.3692,4270450000.0,-0.6423,-1.0375,4363236328.83,-0.0059,62630800.67,64784767.7,2012-01-31,0.11926833305744075

降維方式一:一、特徵選擇--過濾式--相關係數

image

image

image

image

過濾低方差特徵 + 計算相關係數DEMO      

from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
import pandas as pd


def variance_demo():
    """
        過濾低方差特徵 + 計算相關係數
        :return:
        """
    # 一、獲取數據
    data = pd.read_csv("factor_returns.csv")
    data = data.iloc[:, 1:-2]  # 全部行都要,列不顯示最後2行
    print("data:\n", data)

    # 二、實例化一個轉換器類
    transfer = VarianceThreshold(threshold=10)  # threshold表明臨界值爲10,默認爲0

    # 三、調用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new, data_new.shape)

    # 計算某兩個變量之間的相關係數
    r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])
    print("相關係數:\n", r1)
    r2 = pearsonr(data['revenue'], data['total_expense'])
    print("revenue與total_expense之間的相關性:\n", r2)

    return None


if __name__ == '__main__':
    variance_demo()

image

image

 

過濾低方差特徵 + 計算相關係數 + 畫圖DEMO

from sklearn.feature_selection import VarianceThreshold
from scipy.stats import pearsonr
import pandas as pd
import matplotlib.pyplot as plt

def variance_demo():
    """
        過濾低方差特徵 + 計算相關係數
        :return:
        """
    # 一、獲取數據
    data = pd.read_csv("factor_returns.csv")
    data = data.iloc[:, 1:-2]  # 全部行都要,列不顯示最後2行
    print("data:\n", data)

    # 二、實例化一個轉換器類
    transfer = VarianceThreshold(threshold=10)  # threshold表明臨界值爲10,默認爲0

    # 三、調用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new, data_new.shape)

    # 計算某兩個變量之間的相關係數
    r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])
    print("相關係數:\n", r1)
    r2 = pearsonr(data['revenue'], data['total_expense'])
    print("revenue與total_expense之間的相關性:\n", r2)

    # 離散圖
    plt.figure(figsize=(20, 9), dpi=100)
    plt.scatter(data['revenue'], data['total_expense'])
    plt.show()
    return None


if __name__ == '__main__':
    variance_demo()

 

特徵與特徵之間相關性很高,能夠採起:
            1)選取其中一個
            2)加權求和
            3)主成分分析

降維方式二:主成分分析(PCA)

image

image

imageimage

PCI用到的主要方法

image

PCA降維DEMO

from sklearn.decomposition import PCA

def pca_demo():
    """
    PCA降維
    :return:
    """
    data = [[2,8,4,5], [6,3,0,8], [5,4,9,1]]

    #  一、實例化一個轉換器類
    #  transfer = PCA(n_components=2)   # 整數:將3維轉換爲2維
    transfer = PCA(n_components=0.95)   # 小數:保留95%的信息

    # 二、調用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    return None

image

 

案例:探究用戶對物品分類的喜愛 --instacart市場籃子分析案例

image

案例分析:探究用戶對物品類別的喜愛細分:
    首先咱們須要【用戶,user_id】和【物品類別, aisle】2個關鍵參數
    1)須要將user_id和aisle放在同一個表中 –> 合併
    2)找到user_id和aisle關係                 -->  交叉表和透視表
    3)特徵冗餘過多                              --> PCA降維

image

安裝Anaconda3,點擊下載

       安裝可參考:https://www.jianshu.com/p/026a2c43b081

點擊運行:

image

此時會幫咱們打開一個瀏覽器界面:點擊new->Python3,而後就能夠進行編程了(Ctrl + Enter,進行文件變異)

image

image

 

案例DEMO

import pandas as pd
from sklearn.decomposition import PCA

def demo():
    '''
    分析:
         一、 獲取數據
         二、 合併表
         三、 找到UserId和Iias之間的關係
         四、 進行PCA降惟

    :return:
    '''

    # 1. 獲取數據
    aisles = pd.read_csv("F:\instacart\\aisles.csv")
    orders = pd.read_csv("F:\instacart\\orders.csv")
    order_products__prior = pd.read_csv("F:\instacart\\order_products__prior.csv")
    products = pd.read_csv("F:\instacart\\products.csv")

    '''
     2 合併表(目標是UserID和Iisas進行機器學習)

     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
    '''
    # 合併aisles和products aisle的aisle_id
    tab1 = pd.merge(aisles, products, on=["aisle_id", "aisle_id"])

    # 合併tab1和order_products__prior的product_id
    tab2 = pd.merge(tab1, order_products__prior, on=['product_id', 'product_id'])

    # 合併tab2和orders的order_id
    tab3 = pd.merge(tab2, orders, on=['order_id', 'order_id'])

    # 三、 找到UseID和aisle直接的關係(交叉表)
    table = pd.crosstab(tab3['user_id'], tab3['aisle'])

    data = table[:100]

    # 四、 下降維度
    # 4-1:實例化一個轉換器對象,保留95%的信息
    transfer = PCA(n_components=0.95)
    # 4-2: 調用fit_transform()
    data_new = transfer.fit_transform(data)

    # 五、結果

    print('data_new', data_new)   # 100個樣本數據下降維度後的特徵值
    print('data_new.shape', data_new.shape)  # 100個數據有100多個特徵,降維後剩餘19個

 

表合併過程:

image

結果:

image

其餘

代碼和資料下載:

連接:https://pan.baidu.com/s/14vBcB3o5wjef_7lYb7WrSQ 提取碼:td8n

相關文章
相關標籤/搜索