學習目标
- 應用PCA實作特征的降維
- 應用:使用者與物品類别之間主成分分析
1 什麼是主成分分析(PCA)
- 定義:高維資料轉化為低維資料的過程,在此過程中可能會舍棄原有資料、創造新的變量
- 作用:是資料維數壓縮,盡可能降低原資料的維數(複雜度),損失少量資訊。
- 應用:回歸分析或者聚類分析當中
那麼更好的了解這個過程呢?我們來看一張圖

1.1 計算案例了解(了解,無需記憶)
假設對于給定5個點,資料如下
(-1,-2)
(-1, 0)
( 0, 0)
( 2, 1)
( 0, 1)
要求:将這個二維的資料簡化成一維? 并且損失少量的資訊
這個過程如何計算的呢?找到一個合适的直線,通過一個矩陣運算得出主成分分析的結果(不需要了解)
1.2 API
- sklearn.decomposition.PCA(n_components=None)
- 将資料分解為較低維數空間
- n_components:
- 小數:表示保留百分之多少的資訊
- 整數:減少到多少特征
- PCA.fit_transform(X) X:numpy array格式的資料[n_samples,n_features]
- 傳回值:轉換後指定次元的array
1.3 資料計算
先拿個簡單的資料計算一下
[[2,8,4,5],
[6,3,0,8],
[5,4,9,1]]
def pca():
"""
主成分分析進行降維
: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
2 案例:探究使用者對物品類别的喜好細分降維
資料如下:
- 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
2.1 需求
2.2 分析
- 合并表,使得user_id與aisle在一張表當中
- 進行交叉表變換
- 進行降維
2.3 完整代碼
# 去讀四張表的資料
prior = pd.read_csv("./data/instacart/order_products__prior.csv")
products = pd.read_csv("./data/instacart/products.csv")
orders = pd.read_csv("./data/instacart/orders.csv")
aisles = pd.read_csv("./data/instacart/aisles.csv")
# 合并四張表
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 統計使用者與物品之間的次數關系(統計次數)
cross = pd.crosstab(mt2['user_id'], mt2['aisle'])
# PCA進行主成分分析
pc = PCA(n_components=0.95)
data = pc.fit_transform(cross)