日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python降维将多列数据压缩为一列_Python机器学习(Sebastian著 ) 学习笔记——第五章通过降维压缩数据(Windows Spyder Python 3.6)...

發布時間:2024/9/19 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python降维将多列数据压缩为一列_Python机器学习(Sebastian著 ) 学习笔记——第五章通过降维压缩数据(Windows Spyder Python 3.6)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據壓縮是機器學習領域中重要的內容,通過數據壓縮技術可以將原始數據集變換到一個維度更低的新的特征子空間,幫助對數據存儲和分析。

降維壓縮數據,分為無監督和有監督兩類,先來介紹無監督數據壓縮——主成分分析(Principal Component Analysis,PCA)

PCA是在高維數據中找到最大方差的方向,并將數據映射到一個維度不大于原始數據的新的子空間上,可以基于特征之間的關系識別出數據內在的模式。

PCA算法的流程:

對原始d維數據集做標準化出來

構造樣本的協方差矩陣

計算協方差矩陣的特征值和相應的特征向量

選擇與前k個最大特征值對應的特征向量,其中k為新特征空間的維度

通過前k個特征向量構建映射矩陣W

通過映射矩陣W將d維的輸入數據集X轉換到新的k維特征子空間

#獲取葡萄酒數據集

import pandas as pd

df_wine = pd.read_csv('D:\Python\data\wine.data', header=None)

#將數據集劃分為訓練集(70%)和測試集(30%),并使用單位方差進行標準化

from sklearn.cross_validation import train_test_split

from sklearn.preprocessing import StandardScaler

X, y = df_wine.iloc[:, 1:].values, df_wine.iloc[:, 0].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

sc = StandardScaler()

X_train_std = sc.fit_transform(X_train)

X_test_std = sc.fit_transform(X_test)

#構造協方差矩陣

import numpy as np

cov_mat = np.cov(X_train_std.T) #協方差矩陣

eigen_vals, eigen_vecs = np.linalg.eig(cov_mat) #使用Numpy的linalg.eig函數計算數據集協方差矩陣的特征值對

print ('\nEigenvalues \n%s' % eigen_vals)

#特征值的方差貢獻率

tot = sum(eigen_vals)

var_exp = [(i / tot) for i in sorted(eigen_vals, reverse=True)]

cum_var_exp = np.cumsum(var_exp) #Numpy cumsum計算累計方差

import matplotlib.pyplot as plt

plt.bar(range(1, 14), var_exp, alpha=0.5, align='center', label='individual explained variance') #單個方差貢獻

plt.step(range(1, 14), cum_var_exp, where='mid', label='cumulative explained variance') #累計方差貢獻

plt.ylabel('Explained variance ratio')

plt.xlabel('Principal components')

plt.legend(loc='best')

plt.show()

eigen_pairs = [(np.abs(eigen_vals[i]), eigen_vecs[:, i])

for i in range(len(eigen_vals))]

eigen_pairs.sort(key = lambda k : k[0], reverse=True) #按特征值的降序排列特征

w = np.hstack((eigen_pairs[0][1] [:, np.newaxis], eigen_pairs[1][1][:, np.newaxis])) #選取兩個最大特征值對應的特征向量 得到一個13*2的映射矩陣W

print ('Matrix W:\n', w)

X_train_std[0].dot(w)

print (X_train_std[0].dot(w))

X_train_pca = X_train_std.dot(w) #矩陣點積 將124*13的訓練集轉換為包含兩個主成分的子空間上 124*2

print(X_train_pca)

#二維散點圖可視化

colors = ['r', 'b', 'g']

markers = ['s', 'x', 'o']

for l, c, m in zip(np.unique(y_train), colors, markers):

plt.scatter(X_train_pca[y_train == l, 0],

X_train_pca[y_train == l, 1],

c=c, label=l, marker=m)

plt.xlabel('PC 1')

plt.ylabel('PC 2')

plt.legend(loc='lower left')

plt.show()

scikit-learn中提供的PCA類 對數據集預處理再使用邏輯斯蒂回歸對轉換后的數據進行分類

from matplotlib.colors import ListedColormap

import matplotlib.pyplot as plt

#對二維數據集決策邊界可視化

def plot_decision_regions(X, y, classifier, resolution=0.02):

markers = ('s', 'x', 'o', '^', 'v')

colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')

cmap = ListedColormap(colors[:len(np.unique(y))]) #ListedColormap定義顏色 標記符號,通過顏色列表生成顏色示例圖

x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1

x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1

xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),

np.arange(x2_min, x2_max, resolution))

Z = classifier.predict(np.array([xx1.ravel(), xx2.ravel()]).T)

Z = Z.reshape(xx1.shape)

plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)

plt.xlim(xx1.min(), xx1.max())

plt.ylim(xx2.min(), xx2.max())

for idx, cl in enumerate(np.unique(y)):

plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],

alpha=0.8, c=cmap(idx),

marker=markers[idx], label=cl)

from sklearn.linear_model import LogisticRegression

from sklearn.decomposition import PCA

pca = PCA(n_components=2)

lr = LogisticRegression()

X_train_pca = pca.fit_transform(X_train_std)

X_test_pca = pca.transform(X_test_std)

lr.fit(X_train_pca, y_train)

plot_decision_regions(X_train_pca, y_train, classifier=lr)

plt.xlabel('PC1')

plt.ylabel('PC2')

plt.legend(loc='lower left')

plt.show()

總結

以上是生活随笔為你收集整理的python降维将多列数据压缩为一列_Python机器学习(Sebastian著 ) 学习笔记——第五章通过降维压缩数据(Windows Spyder Python 3.6)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。