通过PCA算法对iris数据集进行降维处理
生活随笔
收集整理的這篇文章主要介紹了
通过PCA算法对iris数据集进行降维处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
①加載數據集代碼:
import sklearn from sklearn.datasets import load_iris iris = load_iris() if __name__ == '__main__':iris = sklearn.datasets.load_iris()# data對應了樣本的4個特征,150行4列print('>> shape of data:')print(iris.data.shape)# 顯示樣本特征的前5行print('>> line top 5:')print(iris.data[:5])# target對應了樣本的類別(目標屬性),150行1列print('>> shape of target:')print(iris.target.shape)# 顯示所有樣本的目標屬性print('>> show target of data:')print(iris.target)?②數據標準化(去均值)代碼:
R=np.array(iris.data)# 求每一列的平均值 B=np.mean(R,axis=0,keepdims=True) print('>>average matrix') print(B)# 得到均值矩陣 R=np.matrix(R)-np.matrix(B) print('after-ave top 5 matrix') print(R[:5])此處使用np.mean()函數直接求均值,并將R直接減去均值矩陣(np.matrix()函數會自動對均值矩陣進行擴容),得到標準化(去均值)后的代碼。
③求協方差矩陣代碼:
R_cov = np.cov(R, rowvar=False)iris_covmat = pd.DataFrame(data=R_cov, columns=iris.feature_names)此處引入np.cov(m, y=None, rowvar=True, bias=False, ddof=None, fweights=None, aweights=None)函數,對給定的數據和權重,估計協方差矩陣
并通過pandas庫的DataFrame函數對協方差矩陣進行展示;
④求特征值和特征向量代碼:
# 計算特征值和特征向量eig_values, eig_vectors = np.linalg.eig(R_cov)# 選取前兩個特征向量進行后續操作featureVector = eig_vectors[:, :2]此處使用np.linalg.eig()函數求協方差矩陣的特征值與特征向量。此處將iris數據集降維至二維,故選取前兩個特征向量進行操作。
⑤將數據降到k維(k的值可以依據原數據集選取,如果使用iris數據集,k可以取值為2),按特征值大小排序,選取前k個特征值對應的特征向量,計算:
# 二維簡化:featureVector_t = np.transpose(featureVector)R_t = np.transpose(R)newDataset_t = np.matmul(featureVector_t, R_t)newDataset = np.transpose(newDataset_t)print('>>2D data:')print(newDataset[:5])為了建立新的數據集,我們需要將新特征向量(選定的主成分)的轉置左乘原始矩陣(R)的轉置。之后,輸出前五組降維成功后的數值。
(作業請勿直接復制粘貼請勿直接復制粘貼請勿直接復制粘貼)
借鑒鏈接:https://www.jianshu.com/p/25a66dee6450
總結
以上是生活随笔為你收集整理的通过PCA算法对iris数据集进行降维处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 陆奇给工程师们的5个建议
- 下一篇: 修改cmdline 把内存改成512MB