Alink 是基於 Flink 的機器學習算法平臺,歡迎訪問 Alink 的 GitHub 獲取更多信息。本文主要分享 Alink 的使用技巧之一,Alink 如何讀寫 LIBSVM 格式數據。LIBSVM 數據格式就是 LIBSVM(csie.ntu.edu.tw/~cjlin/)使用的數據格式,是機器學習領域中比較常見的一種形式。其格式定義以下:git
<label> <index1>:<value1> <index2>:<value2> ...
第一項<label> 是訓練數據集的目標值,對於分類問題,用整數作爲類別的標識(對於2分類,多用{0,1}或者{-1,1}表示;對於多分類問題,經常使用連續的整數,譬如用{1,2,3}表示3分類的各個類別);對於迴歸問題,目標值是實數。其後是由若干索引<index>和數值<value>對(以冒號「:」做爲分隔符)構成,各項以空格做爲分隔符。索引<index>是以1開始的整數,能夠是不連續的;數值<value>爲實數。github
下面是幾條符合 LIBSVM 格式的數據。算法
1 1:-0.555556 2:0.5 3:-0.79661 4:-0.916667 1 1:-0.833333 3:-0.864407 4:-0.916667 1 1:-0.444444 2:0.416667 3:-0.830508 4:-0.916667 1 1:-0.611111 2:0.0833333 3:-0.864407 4:-0.916667 2 1:0.5 3:0.254237 4:0.0833333 2 1:0.166667 3:0.186441 4:0.166667 2 1:0.444444 2:-0.0833334 3:0.322034 4:0.166667
注意這條數據:機器學習
2 1:0.5 3:0.254237 4:0.0833333
沒有索引值爲2的項,代表第2個特徵值爲0。學習
咱們將 csie.ntu.edu.tw/~cjlin/ 下載到本地,命名爲 iris.scale.libsvm。經過調用 LibSvmSourceBatchOp 讀取數據,只需指定一個參數,即文件的路徑。並取其前3條數據進行打印顯示。spa
iris_libsvm = LibSvmSourceBatchOp()\ .setFilePath("/Users/yangxu/alink/data/iris/iris.scale.libsvm") iris_libsvm.firstN(3).print()
輸出結果以下,最左邊爲打印顯示的數據索引號,接下來是數據的標籤列(列名自動命名爲 label),而後是數據的特徵數據列(列名自動命名爲 features)。code
下面,咱們對原始的數據採樣10條數據,而後使用 LibSvmSinkBatchOp 保存採樣的結果,注意,這裏除了保存的路徑還要指定三個參數,前兩個是數據的標籤列名稱和特徵數據列名稱,最後一個參數 OverwriteSink,表示保存操做執行時,若是目標文件已經存在,是否進行覆蓋。在腳本的最後,調用 BatchOperator.execute(),執行任務。blog
iris_libsvm \ .sampleWithSize(10) \ .link( LibSvmSinkBatchOp()\ .setFilePath("/Users/yangxu/alink/data/iris/iris.scale.sample.libsvm")\ .setLabelCol('label')\ .setVectorCol('features')\ .setOverwriteSink(True) ) BatchOperator.execute()
最後,咱們驗證一下保存的結果文件,即讀取 iris.scale.sample.libsvm 並打印輸出。索引
LibSvmSourceBatchOp().setFilePath("/Users/yangxu/alink/data/iris/iris.scale.sample.libsvm").print()
輸出結果爲:rem
以上。Alink 是基於 Flink 的機器學習算法平臺,歡迎訪問 Alink 的 GitHub 連接獲取更多信息。也歡迎加入 Alink 開源用戶羣進行交流~
Alink GitHub 連接:
https://github.com/alibaba/Alink
▼ 釘釘掃碼加入 Alink 技術交流羣 ▼