python數據預處理方式 :數據降維

今天小編就爲大家分享一篇python數據預處理方式 :數據降維,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
數據爲何要降維

數據降維可以降低模型的計算量並減少模型運行時間、降低噪音變量信息對於模型結果的影響、便於通過可視化方式展示歸約後的維度信息並減少數據存儲空間。因此,大多數情況下,當我們面臨高維數據時,都需要對數據做降維處理。

數據降維有兩種方式:特徵選擇,維度轉換

特徵選擇

特徵選擇指根據一定的規則和經驗,直接在原有的維度中挑選一部分參與到計算和建模過程,用選擇的特徵代替所有特徵,不改變原有特徵,也不產生新的特徵值。

特徵選擇的降維方式好處是可以保留原有維度特徵的基礎上進行降維,既能滿足後續數據處理和建模需求,又能保留維度原本的業務含義,以便於業務理解和應用。對於業務分析性的應用而言,模型的可理解性和可用性很多時候要有限於模型本身的準確率、效率等技術指標。例如,決策樹得到的特徵規則,可以作爲選擇用戶樣本的基礎條件,而這些特徵規則便是基於輸入的維度產生。

維度轉換

這個是按照一定數學變換方法,把給定的一組相關變量(維度)通過數學模型將高緯度空間的數據點映射到低緯度空間中,然後利用映射後變量的特徵來表示原有變量的總體特徵。這種方式是一種產生新維度的過程,轉換後的維度並非原來特徵,而是之前特徵的轉化後的表達式,新的特徵丟失了原有數據的業務含義。 通過數據維度變換的降維方法是非常重要的降維方法,這種降維方法分爲線性降維和非線性降維兩種,其中常用的代表算法包括獨立成分分析(ICA),主成分分析(PCA),因子分析(Factor Analysis,FA),線性判別分析(LDA),局部線性嵌入(LLE),核主成分分析(Kernel PCA)等。

使用python做降維處理

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.decomposition import PCA
 
# 數據導入
df = pd.read_csv('https://raw.githubusercontent.com/ffzs/dataset/master/glass.csv')
 
# 看一下數據是
df.head()
 
 
   RI   Na Mg Al   Si   K   Ca   Ba   Fe  Type
0 1.52101 13.64 4.49 1.10 71.78 0.06 8.75 0.0 0.0 1
1 1.51761 13.89 3.60 1.36 72.73 0.48 7.83 0.0 0.0 1
2 1.51618 13.53 3.55 1.54 72.99 0.39 7.78 0.0 0.0 1
3 1.51766 13.21 3.69 1.29 72.61 0.57 8.22 0.0 0.0 1
4 1.51742 13.27 3.62 1.24 73.08 0.55 8.07 0.0 0.0 1
 
# 有無缺失值
df.isna().values.any()
# False 沒有缺失值
 
# 獲取特徵值
X = df.iloc[:, :-1].values
# 獲取標籤值
Y = df.iloc[:,[-1]].values
# 使用sklearn 的DecisionTreeClassifier判斷變量重要性
# 建立分類決策樹模型對象
dt_model = DecisionTreeClassifier(random_state=1)
# 將數據集的維度和目標變量輸入模型
dt_model.fit(X, Y)
# 獲取所有變量的重要性
feature_importance = dt_model.feature_importances_
feature_importance
# 結果如下
# array([0.20462132, 0.06426227, 0.16799114, 0.15372793, 0.07410088, 0.02786222, 0.09301948, 0.16519298, 0.04922178])
# 做可視化
import matplotlib.pyplot as plt
 
x = range(len(df.columns[:-1])) 
plt.bar(left= x, height=feature_importance)
plt.xticks(x, df.columns[:-1])

可見Rl、Mg、Al、Ba的重要性比較高,一般情況下變量重要性得分接近80%,基本上已經可以解釋大部分的特徵變化。

PCA降維

# 使用sklearn的PCA進行維度轉換
# 建立PCA模型對象 n_components控制輸出特徵個數
pca_model = PCA(n_components=3)
# 將數據集輸入模型
pca_model.fit(X)
# 對數據集進行轉換映射
pca_model.transform(X)
# 獲得轉換後的所有主成分
components = pca_model.components_
# 獲得各主成分的方差
components_var = pca_model.explained_variance_
# 獲取主成分的方差佔比
components_var_ratio = pca_model.explained_variance_ratio_
# 打印方差
print(np.round(components_var,3))
# [3.002 1.659 0.68 ]
# 打印方差佔比
print(np.round(components_var_ratio,3))
# [0.476 0.263 0.108]

推薦我們的python學習基地,點擊進入,看老程序是如何學習的!從基礎的python腳本、爬蟲、django

、數據挖掘等編程技術,工作經驗,還有前輩精心爲學習python的小夥伴整理零基礎到項目實戰的資料

,!每天都有程序員定時講解Python技術,分享一些學習的方法和需要留意的小細節
以上這篇python數據預處理方式 :數據降維就是小編分享給大家的全部內容了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章