1. 程式人生 > >PCA主成份分析(Spark 2.0)

PCA主成份分析(Spark 2.0)

PCA在Spark2.0用法比較簡單,只需要設定:
.setInputCol(“features”)//保證輸入是特徵值向量
.setOutputCol(“pcaFeatures”)//輸出
.setK(3)//主成分個數
注意:PCA前一定要對特徵向量進行規範化(標準化)!!!


//Spark 2.0 PCA主成分分析
//注意:PCA降維前必須對原始資料(特徵向量)進行標準化處理
package my.spark.ml.practice;

import org.apache.spark.ml.feature.PCA;
import org.apache.spark.ml.feature
.PCAModel;//不是mllib import org.apache.spark.ml.feature.StandardScaler; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; public class myPCA { public static void main(String[] args) { SparkSession spark=SparkSession .builder
() .appName("myLR") .master("local[4]") .getOrCreate(); Dataset<Row> rawDataFrame=spark.read().format("libsvm") .load("/home/hadoop/spark/spark-2.0.0-bin-hadoop2.6" + "/data/mllib/sample_libsvm_data.txt"); //首先對特徵向量進行標準化 Dataset<Row> scaledDataFrame=new StandardScaler() .setInputCol
("features") .setOutputCol("scaledFeatures") .setWithMean(false)//對於稀疏資料(如本次使用的資料),不要使用平均值 .setWithStd(true) .fit(rawDataFrame) .transform(rawDataFrame); //PCA Model PCAModel pcaModel=new PCA() .setInputCol("scaledFeatures") .setOutputCol("pcaFeatures") .setK(3)// .fit(scaledDataFrame); //進行PCA降維 pcaModel.transform(scaledDataFrame).select("label","pcaFeatures").show(100,false); } } /** * 沒有標準化特徵向量,直接進行PCA主成分:各主成分之間值變化太大,有數量級的差別。 +-----+------------------------------------------------------------+ |label|pcaFeatures | +-----+------------------------------------------------------------+ |0.0 |[-1730.496937303442,6.811910953794295,2.8044962135250024] | |1.0 |[290.7950975587044,21.14756134360174,0.7002807351637692] | |1.0 |[149.4029441007031,-13.733854376555671,9.844080682283838] | |1.0 |[200.47507801105797,18.739201694569232,22.061802015132024] | |1.0 |[236.57576401934855,36.32142445435475,56.49778957910826] | |0.0 |[-1720.2537550195714,25.318146742090196,2.8289957152580136] | |1.0 |[285.94940382351075,-6.729431266185428,-33.69780131162192] | |1.0 |[-323.70613777909136,2.72250162998038,-0.528081577573507] | |0.0 |[-1150.8358810584655,5.438673892459839,3.3725913786301804] | */ /** * 標準化特徵向量後PCA主成分,各主成分之間值基本上在同一水平上,結果更合理 |label|pcaFeatures | +-----+-------------------------------------------------------------+ |0.0 |[-14.998868464839624,-10.137788261664621,-3.042873539670117] | |1.0 |[2.1965800525589754,-4.139257418439533,-11.386135042845101] | |1.0 |[1.0254645688925883,-0.8905813756164163,7.168759904518129] | |1.0 |[1.5069317554093433,-0.7289177578028571,5.23152743564543] | |1.0 |[1.6938250375084654,-0.4350617717494331,4.770263568537382] | |0.0 |[-15.870371979062549,-9.999445137658528,-6.521920373215663] | |1.0 |[3.023279951602481,-4.102323190311296,-9.451729897327345] | |1.0 |[3.500670997961283,-4.1791886802435805,-9.306353932746568] | |0.0 |[-15.323114679599747,-16.83241059234951,2.0282183995400374] | */

如何選擇k值?

//PCA Model
        PCAModel pcaModel=new PCA()
                      .setInputCol("scaledFeatures")
                      .setOutputCol("pcaFeatures")
                      .setK(100)//
                      .fit(scaledDataFrame);
        int i=1;
        for(double x:pcaModel.explainedVariance().toArray()){
        System.out.println(i+"\t"+x+"  ");
        i++;
        }
輸出100個降序的explainedVariance(和scikit-learn中PCA一樣):
1   0.25934799275530857  
2   0.12355355301486977  
3   0.07447670060988294  
4   0.0554545717486928  
5   0.04207050513264405  
6   0.03715986573644129  
7   0.031350566055423544  
8   0.027797304129489515  
9   0.023825873477496748  
10  0.02268054946233242  
11  0.021320060154167115  
12  0.019764029918116235  
13  0.016789082901450734  
14  0.015502412597350008  
15  0.01378190652256973  
16  0.013539546429755526  
17  0.013283518226716669  
18  0.01110412833334044  
...

Scikit中使用PCA

n_components:
意義:PCA演算法中所要保留的主成分個數n,也即保留下來的特徵個數n
型別:int 或者 string,預設時預設為None,所有成分被保留。
賦值為int,比如n_components=1,將把原始資料降到一個維度。
賦值為string,比如n_components=’mle’,將自動選取特徵個數n,使得滿足所要求的方差百分比。
copy:
型別:bool,True或者False,預設時預設為True。
意義:表示是否在執行演算法時,將原始訓練資料複製一份。若為True,則執行PCA演算法後,原始訓練資料的值不 會有任何改變,因為是在原始資料的副本上進行運算;若為False,則執行PCA演算法後,原始訓練資料的 值會改,因為是在原始資料上進行降維計算。
whiten:
型別:bool,預設時預設為False
意義:白化,使得每個特徵具有相同的方差。關於“白化”,可參考:Ufldl教程

簡單例子:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-


from sklearn import datasets
from sklearn.decomposition import PCA


iris = datasets.load_iris()

X = iris.data
y = iris.target
target_names = iris.target_names

pca = PCA(n_components=3)
X_r = pca.fit(X).transform(X)
print "X_r"
print X_r

print "X"
print X

print "pca.explained_variance_ratio"
print pca.explained_variance_ratio_

相關推薦

PCA成份分析Spark 2.0

PCA在Spark2.0用法比較簡單,只需要設定: .setInputCol(“features”)//保證輸入是特徵值向量 .setOutputCol(“pcaFeatures”)//輸出 .setK(3)//主成分個數 注意:PCA前一定要

用pycharm + python寫sparkspark-2.0.1-bin-hadoop2.6

一、將pyspark放入: 該目錄位置(我的是mac): /Library/Python/2.7/site-packages 二、env配置: 步驟1: 步驟2: 步驟3: SPARK_CLASSPATH /Users/Chave

Glide 系列-2:主流程原始碼分析4.8.0

Glide 是 Android 端比較常用的圖片載入框架,這裡我們就不再介紹它的基礎的使用方式。你可以通過檢視其官方文件學習其基礎使用。這裡,我們給出一個 Glide 的最基本的使用示例,並以此來研究這個整個過程發生了什麼: Glide.with(fragment).load(myU

PCA成分分析入門計算+深入解析(一)

PCA主成分分析(入門+深入)+最大方差理論+幾何意義 Principal components analysis   我們在作資料分析處理時,資料往往包含多個變數,而較多的變數會帶來分析問題的複雜性。主成分分析(Principal componen

java8下spark-streaming結合kafka程式設計spark 2.0 & kafka 0.10

1.相關元件版本 首先確認版本,因為跟之前的版本有些不一樣,所以才有必要記錄下,另外仍然沒有使用scala,使用java8,spark 2.0.0,kafka 0.10。 2.引入maven包 網上找了一些結合的例子,但是跟我當前版本不一樣,所以根本就

響應式編程庫Reactor 3 Reference Guide參考文檔中文版v3.2.0

響應式編程Project Reactor 是 Spring WebFlux 的禦用響應式編程庫,與 Spring 是兄弟項目。 關於如何基於Spring的組件進行響應式應用的開發,歡迎閱讀系列文章《響應式Spring的道法術器》。 官方參考文檔地址:http://projectreactor.io/doc

CCF-棋局評估 201803-04版本 2.0------之前寫了一個臃腫的1.0版 ,還沾沾自喜 233

核心 color namespace ace for play class 一個 while 核心 : 博弈搜索樹    雙方得分互為相反數    dfs (x,y,player): 玩家player下完(x,y)之後的得分最大值 易錯: 先判斷輸贏,再判斷

SpringBoot入門3SpringBoot 2.0

參考:Spring Boot 2.0深度實踐-初遇Spring Boot 環境: JDK8 Maven IDEA POSTMAN   1、Spring Boot 介紹 2、Spring Boot 2.0 新特性 3、Spring Web MVC 學習

nRF52832 改變ATT_MTU提高藍牙數據發送速率nRF5_SDK_14.2.0

bsp 輪轉 family 允許 efi slave 代碼 數據 handler nRF52832 作為一個低功耗藍牙芯片,其數據發送發送速率一直都偏低(高就不叫低功耗了^_^),作為初學者在網上找了很多資料,終於找到通過修改ATT_MTU來提升發送速率的方法,最快能達到8

nRF52832 改變ATT_MTU提高藍芽資料傳送速率nRF5_SDK_14.2.0

nRF52832 作為一個低功耗藍芽晶片,其資料傳送傳送速率一直都偏低(高就不叫低功耗了^_^),作為初學者在網上找了很多資料,終於找到通過修改ATT_MTU來提升傳送速率的方法,最快能達到8.2KB/s,現在就分享出來 首先我用的協議棧是 nRF5_SDK_14.2.0 ,將\examples\ble_p

nRF52832 BLE_DFU空中升級OTA安裝軟件SDK14.2.0

bin x文件 dde 工具 hub ref 是否 tar 文件夾 準備工作,需要安裝好幾個軟件,詳細的過程請參考下面的文章(http://www.cnblogs.com/iini/p/9314246.html)這裏說的非常詳細,而且也有工具在雲盤,對於初學者非常友好。我這

nRF52832 BLE_DFU空中升級OTA安裝軟體SDK14.2.0

準備工作,需要安裝好幾個軟體,詳細的過程請參考下面的文章(http://www.cnblogs.com/iini/p/9314246.html)這裡說的非常詳細,而且也有工具在雲盤,對於初學者非常友好。我這裡只是把步驟列出來,僅供參考 安裝軟體: 安裝"make"編譯環境 1,雙擊"make-3.81.

nRF52832 BLE_DFU空中升級OTA編譯下載SDK14.2.0

上一篇配置好了開發環境,現在就可以試著跑一下例程了,這裡需要兩個例程,一個是bootloader的,一個是應用程式的,其路徑分別為: bootloader:SDK_14.2.0工程\examples\dfu\bootloader_secure_ble\pca10040\arm5_no_packs 應用程式

nRF52832 BLE_DFU空中升級OTA準備升級工程SDK14.2.0

準備需要加入DFU功能的工程 在工程main檔案services_init函式中加入DFU服務 1 uint32_t err_code; 2 3 // Initialize the async SVCI interface to bootloader. 4 err_code = ble_d

新版CSDN Markdown編輯器上線公告Alpha 2.0

感謝大家一直支援CSDN Markdown編輯器,每一次改動和優化,都是努力讓你的寫作體驗變得更好。這次我們更新了以下內容: 我們重構了MD編輯器程式碼,比起以前更穩定,速度也更快; 增加了儲存功能;

新版 CSDN Markdown 編輯器上線公告Alpha 2.0

感謝大家一直支援 CSDN Markdown 編輯器,每一次改動和優化,都是努力讓你的寫作體驗變得更好。 這次我們更新了以下內容: 我們重構了 MD 編輯器程式碼,比起以前更穩定,速度也更快; 增加了

【機器學習-斯坦福】學習筆記14 成分分析Principal components analysis-最大方差解釋

 在這一篇之前的內容是《Factor Analysis》,由於非常理論,打算學完整個課程後再寫。在寫這篇之前,我閱讀了PCA、SVD和LDA。這幾個模型相近,卻都有自己的特點。本篇打算先介紹PCA,至於他們之間的關係,只能是邊學邊體會了。PCA以前也叫做Principal

Atitit 網際網路之道 1.1. 網際網路 1 2. 網際網路經歷了三個時代,門戶時代、搜尋/社交時代、大網際網路時代 1 2.1. Web2.0.搜尋/社交時代Web 2.0 2 2.2. Web

Atitit 網際網路之道 1.1. 網際網路2. 網際網路經歷了三個時代,門戶時代、搜尋/社交時代、大網際網路時代,每一個時代都給中國網際網路歷史留下了深深的足跡,推動著中國網際網路上不斷的創新和發展。2.1. Web2.0.搜尋/社交時代(Web 2.0)網路是平臺,使用

成分分析Principal components analysis-最大方差解釋

轉載自:   在這一篇之前的內容是《Factor Analysis》,由於非常理論,打算學完整個課程後再寫。在寫這篇之前,我閱讀了PCA、SVD和LDA。這幾個模型相近,卻都有自己的特點。本篇打算先介紹PCA,至於他們之間的關係,只能是邊學邊體會了。PCA以前也叫做Pri

PCA成分數量降維維度選擇

介紹 我們知道,PCA是用於對資料做降維的,我們一般用PCA把m維的資料降到k維(k < m)。 那麼問題來了,k取值多少才合適呢? PCA誤差 PCA的原理是,為了將資料從n維降低到k維,需要找到k個向量,用於投影原始資料,是投影誤差(投影距離)