【機(jī)器學(xué)習(xí)】快速入門特征工程
點(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([[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]])
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

搭建深度學(xué)習(xí)環(huán)境之一:安裝Docker
累計(jì)連續(xù)簽到設(shè)計(jì)和實(shí)現(xiàn)
以上,便是今天的分享,希望大家喜歡,覺得內(nèi)容不錯(cuò)的,歡迎「分享」「贊」或者點(diǎn)擊「在看」支持,謝謝各位。

