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寫spark(spark-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入門3(SpringBoot 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個向量,用於投影原始資料,是投影誤差(投影距離)