風火程式設計 機器學習之主成分分析 PCA

2021-09-30 18:08:15 字數 2838 閱讀 5785

第一主成分

# 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 ...