第一主成分
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
x = np.empty((100, 2))
x[:, 0] = np.random.uniform(0., 100., size=100)
x[:, 1] = 0.75*x[:, 0] + 3. + np.random.normal(0., 10., size=100)
def demean(x):
"""歸零化處理, 不能用歸一化和標準化
:param x: 樣本特徵
:return: 歸零化後的特徵
"""return x - np.mean(x, axis=0)
x_demean = demean(x)
def f(w, x_demean):
"""梯度上公升法的效用函式
:param w:
:param x_demean:歸零化後的樣本特徵
:return:效用函式的值
"""return np.sum(x.dot(w)**2)/len(x)
def df(w, f):
"""梯度函式
:param w:第一主成分方向向量
:param f:效用函式
:return:梯度值
"""return x.t.dot(x.dot(w))*2./len(x)
def grident_ascent(x, initial_w, eta=0.001, n_iters=10000, epsilon=1):
"""梯度上公升法求解
:param x: 歸零化的樣本特徵
:param initial_w: 初始向量
:param eta: 學習率
:param n_iters:
:param epsilon:
:return:第一主成分單位向量
"""direction = lambda w: w/np.linalg.norm(w)
x_demean = demean(x)
w = direction(initial_w)
current_iter = 0
while current_iter < n_iters:
grident = df(w, x)
last_w = w
w = w + eta * grident
# 每次迴圈均應把向量轉換成單位向量
w = direction(w)
if abs(f(w,x_demean) - f(last_w, x_demean)) < epsilon:
break
current_iter += 1
return w
if __name__ == '__main__':
# 向量的初始值不能為0
initial_w = np.random.random(x.shape[1])
w = grident_ascent(x, initial_w)
print(w)
plt.scatter(x_demean[:, 0], x_demean[:, 1])
plt.plot([0, w[0]*30], [0, w[1]*30], color="r")
plt.show()
前n主成分
def first_n_components(n, x, eta=0.001, n_iters=10000, epsilon=1):
"""前n個主成分
:param n:需要的主成分個數
:param x:樣本特徵
:param eta:學習率
:param n_iters:最大迭代次數
:param epsilon:及機器精度
:return: 前n個主成分的列表
"""x_pca = x.copy()
res =
for i in range(n):
initial_w = np.random.random(x_pca.shape[1])
w = first_component(x_pca, initial_w, eta, n_iters, epsilon)
x_pca = x_pca - x_pca.dot(w).reshape(-1, 1) * w
return res
pca降維描述
非監督學習
求得乙個方向向量向量使得效用函式(方差)取極大值.
降維前對樣本歸零化處理(denean), 即所有項減去均值.
用於降維, 降噪, 視覺化, 特徵臉
pca降維介面
from sklearn.decomposition import pca
# 傳入0-1的小數表示保留的方差比例, 傳入n_components=2表示保留的維度
pca =pca()
pca.fit(data)
x_pca = pca.fit_transform(x) # 降維
x = pca.inverse_transform(x_pca ) # 恢復維度
通過pca降維n_components=2後進行視覺化
# n 為目標種類
for i in range(n):
plt.scatter(x_pca[y==i, 0], x_pca[y==i, 1], alpha=0.5)
機器學習演算法之 主成分分析(PCA)
降維是對資料高維度特徵的一種預處理方法。降維是將高維度的資料保留下最重要的一些特徵,去除雜訊和不重要的特徵,從而實現提公升資料處理速度的目的。在實際的生產和應用中,降維在一定的資訊損失範圍內,可以為我們節省大量的時間和成本。降維也成為了應用非常廣泛的資料預處理方法。1 使得資料集更易使用 2 降低演...
機器學習非監督分類之主成分分析(PCA)
主成分分析是非監督分類中基礎的演算法,應用於降低特徵的維度。在介紹主成分分析之前,我們要先介紹一下特徵值和特徵向量,因為在後面我們要用到。一 特徵值和特徵向量 特徵值如果有 此時 為矩陣a的特徵值,對應的x為矩陣的特徵向量。對於不相同的特徵值,其特徵向量是正交的。二 主成分分析 演算法 首先將x進行...
機器學習 主成分分析
那麼更好的理解這個過程呢?我們來看一張圖 假設對於給定5個點,資料如下 要求 將這個二維的資料簡化成一維?並且損失少量的資訊 這個過程如何計算的呢?找到乙個合適的直線,通過乙個矩陣運算得出主成分分析的結果 不需要理解 pca.fit transform x x numpy array格式的資料 n ...