python實現CSV特徵檔案轉化為libsvm特徵檔案輸入spark中進行機器學習
阿新 • • 發佈:2018-12-16
今天早早地下班,閒來無事就繼續鼓搗spark了,spark計算能力很強之外還有一個很強大的功能就是機器學習,藉助於spark平臺的高效能以及高計算能力,機器學習演算法也被廣泛地開發出來,今天在實際使用spark中提供的機器學習演算法的時候遇到一個問題就是:
當前spark讀取的都是libsvm格式的資料,我對於libsvm的瞭解,僅僅停留在他是臺大開發出來的獨立執行的svm工具而已,對於libsvm格式的資料還是一片空白,之前自己使用的特徵檔案大多數為:CSV、txt或者是xls和xlsx格式的,所以這裡就出現了問題,上網查了一些關於libsvm資料格式的資料如下:
libsvm資料格式 libsvm使用的訓練資料和檢驗資料檔案格式如下: [label] [index1]:[value1] [index2]:[value2] … [label] [index1]:[value1] [index2]:[value2] … label 目標值,就是說class(屬於哪一類),就是你要分類的種類,通常是一些整數。 index 是有順序的索引,通常是連續的整數。就是指特徵編號,必須按照升序排列 value 就是特徵值,用來train的資料,通常是一堆實陣列成。 即: 目標值 第一維特徵編號:第一維特徵值 第二維特徵編號:第二維特徵值 … 目標值 第一維特徵編號:第一維特徵值 第二維特徵編號:第二維特徵值 … …… 目標值 第一維特徵編號:第一維特徵值 第二維特徵編號:第二維特徵值 … 例如:0 1:0.656 2:5.48 3:54 4:1 5:7 6:2 表示訓練用的特徵有4維,第一維是0.656,第二維是5.48,第三維是54,第四維是1,第五維是7,第六維是2 目標值是0 注意:訓練和測試資料的格式必須相同,都如上所示。測試資料中的目標值是為了計算誤差用。
今天嘗試了將CSV格式的資料轉化為libsvm格式的資料來使用,經過實踐嘗試發現可以正常工作,下面是轉化的指令碼(以skearn自帶的鳶尾花資料集為例):
def CSV2Libsvm(data='iris.csv',savepath='iris.txt'): ''' 將CSV資料格式轉化為libsvm資料格式 ''' csv_reader=csv.reader(open(data)) data_list=[] for one_line in csv_reader: if str(one_line[0])!='id': data_list.append(one_line) res_list=[] label_dict={'virginica':'2','versicolor':'1','setosa':'0'} for one_list in data_list: one_tmp_list=[label_dict[one_list[-1]]] for i in range(1,len(one_list)-1): one_tmp=str(i)+':'+str(one_list[i]) one_tmp_list.append(one_tmp) res_list.append(' '.join(one_tmp_list)) with open(savepath,'wb') as f: for one_line in res_list: f.write(one_line.strip()+'\n')
轉化結果如下:
0 1:5.1 2:3.5 3:1.4 4:0.2 0 1:4.9 2:3 3:1.4 4:0.2 0 1:4.7 2:3.2 3:1.3 4:0.2 0 1:4.6 2:3.1 3:1.5 4:0.2 0 1:5 2:3.6 3:1.4 4:0.2 0 1:5.4 2:3.9 3:1.7 4:0.4 0 1:4.6 2:3.4 3:1.4 4:0.3 0 1:5 2:3.4 3:1.5 4:0.2 0 1:4.4 2:2.9 3:1.4 4:0.2 0 1:4.9 2:3.1 3:1.5 4:0.1 0 1:5.4 2:3.7 3:1.5 4:0.2 0 1:4.8 2:3.4 3:1.6 4:0.2 0 1:4.8 2:3 3:1.4 4:0.1 0 1:4.3 2:3 3:1.1 4:0.1 0 1:5.8 2:4 3:1.2 4:0.2 0 1:5.7 2:4.4 3:1.5 4:0.4 0 1:5.4 2:3.9 3:1.3 4:0.4 0 1:5.1 2:3.5 3:1.4 4:0.3 0 1:5.7 2:3.8 3:1.7 4:0.3 0 1:5.1 2:3.8 3:1.5 4:0.3 0 1:5.4 2:3.4 3:1.7 4:0.2 0 1:5.1 2:3.7 3:1.5 4:0.4 0 1:4.6 2:3.6 3:1 4:0.2 0 1:5.1 2:3.3 3:1.7 4:0.5 0 1:4.8 2:3.4 3:1.9 4:0.2 0 1:5 2:3 3:1.6 4:0.2 0 1:5 2:3.4 3:1.6 4:0.4 0 1:5.2 2:3.5 3:1.5 4:0.2 0 1:5.2 2:3.4 3:1.4 4:0.2 0 1:4.7 2:3.2 3:1.6 4:0.2 0 1:4.8 2:3.1 3:1.6 4:0.2 0 1:5.4 2:3.4 3:1.5 4:0.4 0 1:5.2 2:4.1 3:1.5 4:0.1 0 1:5.5 2:4.2 3:1.4 4:0.2 0 1:4.9 2:3.1 3:1.5 4:0.2 0 1:5 2:3.2 3:1.2 4:0.2 0 1:5.5 2:3.5 3:1.3 4:0.2 0 1:4.9 2:3.6 3:1.4 4:0.1 0 1:4.4 2:3 3:1.3 4:0.2 0 1:5.1 2:3.4 3:1.5 4:0.2 0 1:5 2:3.5 3:1.3 4:0.3 0 1:4.5 2:2.3 3:1.3 4:0.3 0 1:4.4 2:3.2 3:1.3 4:0.2 0 1:5 2:3.5 3:1.6 4:0.6 0 1:5.1 2:3.8 3:1.9 4:0.4 0 1:4.8 2:3 3:1.4 4:0.3 0 1:5.1 2:3.8 3:1.6 4:0.2 0 1:4.6 2:3.2 3:1.4 4:0.2 0 1:5.3 2:3.7 3:1.5 4:0.2 0 1:5 2:3.3 3:1.4 4:0.2 1 1:7 2:3.2 3:4.7 4:1.4 1 1:6.4 2:3.2 3:4.5 4:1.5 1 1:6.9 2:3.1 3:4.9 4:1.5 1 1:5.5 2:2.3 3:4 4:1.3 1 1:6.5 2:2.8 3:4.6 4:1.5 1 1:5.7 2:2.8 3:4.5 4:1.3 1 1:6.3 2:3.3 3:4.7 4:1.6 1 1:4.9 2:2.4 3:3.3 4:1 1 1:6.6 2:2.9 3:4.6 4:1.3 1 1:5.2 2:2.7 3:3.9 4:1.4 1 1:5 2:2 3:3.5 4:1 1 1:5.9 2:3 3:4.2 4:1.5 1 1:6 2:2.2 3:4 4:1 1 1:6.1 2:2.9 3:4.7 4:1.4 1 1:5.6 2:2.9 3:3.6 4:1.3 1 1:6.7 2:3.1 3:4.4 4:1.4 1 1:5.6 2:3 3:4.5 4:1.5 1 1:5.8 2:2.7 3:4.1 4:1 1 1:6.2 2:2.2 3:4.5 4:1.5 1 1:5.6 2:2.5 3:3.9 4:1.1 1 1:5.9 2:3.2 3:4.8 4:1.8 1 1:6.1 2:2.8 3:4 4:1.3 1 1:6.3 2:2.5 3:4.9 4:1.5 1 1:6.1 2:2.8 3:4.7 4:1.2 1 1:6.4 2:2.9 3:4.3 4:1.3 1 1:6.6 2:3 3:4.4 4:1.4 1 1:6.8 2:2.8 3:4.8 4:1.4 1 1:6.7 2:3 3:5 4:1.7 1 1:6 2:2.9 3:4.5 4:1.5 1 1:5.7 2:2.6 3:3.5 4:1 1 1:5.5 2:2.4 3:3.8 4:1.1 1 1:5.5 2:2.4 3:3.7 4:1 1 1:5.8 2:2.7 3:3.9 4:1.2 1 1:6 2:2.7 3:5.1 4:1.6 1 1:5.4 2:3 3:4.5 4:1.5 1 1:6 2:3.4 3:4.5 4:1.6 1 1:6.7 2:3.1 3:4.7 4:1.5 1 1:6.3 2:2.3 3:4.4 4:1.3 1 1:5.6 2:3 3:4.1 4:1.3 1 1:5.5 2:2.5 3:4 4:1.3 1 1:5.5 2:2.6 3:4.4 4:1.2 1 1:6.1 2:3 3:4.6 4:1.4 1 1:5.8 2:2.6 3:4 4:1.2 1 1:5 2:2.3 3:3.3 4:1 1 1:5.6 2:2.7 3:4.2 4:1.3 1 1:5.7 2:3 3:4.2 4:1.2 1 1:5.7 2:2.9 3:4.2 4:1.3 1 1:6.2 2:2.9 3:4.3 4:1.3 1 1:5.1 2:2.5 3:3 4:1.1 1 1:5.7 2:2.8 3:4.1 4:1.3 2 1:6.3 2:3.3 3:6 4:2.5 2 1:5.8 2:2.7 3:5.1 4:1.9 2 1:7.1 2:3 3:5.9 4:2.1 2 1:6.3 2:2.9 3:5.6 4:1.8 2 1:6.5 2:3 3:5.8 4:2.2 2 1:7.6 2:3 3:6.6 4:2.1 2 1:4.9 2:2.5 3:4.5 4:1.7 2 1:7.3 2:2.9 3:6.3 4:1.8 2 1:6.7 2:2.5 3:5.8 4:1.8 2 1:7.2 2:3.6 3:6.1 4:2.5 2 1:6.5 2:3.2 3:5.1 4:2 2 1:6.4 2:2.7 3:5.3 4:1.9 2 1:6.8 2:3 3:5.5 4:2.1 2 1:5.7 2:2.5 3:5 4:2 2 1:5.8 2:2.8 3:5.1 4:2.4 2 1:6.4 2:3.2 3:5.3 4:2.3 2 1:6.5 2:3 3:5.5 4:1.8 2 1:7.7 2:3.8 3:6.7 4:2.2 2 1:7.7 2:2.6 3:6.9 4:2.3 2 1:6 2:2.2 3:5 4:1.5 2 1:6.9 2:3.2 3:5.7 4:2.3 2 1:5.6 2:2.8 3:4.9 4:2 2 1:7.7 2:2.8 3:6.7 4:2 2 1:6.3 2:2.7 3:4.9 4:1.8 2 1:6.7 2:3.3 3:5.7 4:2.1 2 1:7.2 2:3.2 3:6 4:1.8 2 1:6.2 2:2.8 3:4.8 4:1.8 2 1:6.1 2:3 3:4.9 4:1.8 2 1:6.4 2:2.8 3:5.6 4:2.1 2 1:7.2 2:3 3:5.8 4:1.6 2 1:7.4 2:2.8 3:6.1 4:1.9 2 1:7.9 2:3.8 3:6.4 4:2 2 1:6.4 2:2.8 3:5.6 4:2.2 2 1:6.3 2:2.8 3:5.1 4:1.5 2 1:6.1 2:2.6 3:5.6 4:1.4 2 1:7.7 2:3 3:6.1 4:2.3 2 1:6.3 2:3.4 3:5.6 4:2.4 2 1:6.4 2:3.1 3:5.5 4:1.8 2 1:6 2:3 3:4.8 4:1.8 2 1:6.9 2:3.1 3:5.4 4:2.1 2 1:6.7 2:3.1 3:5.6 4:2.4 2 1:6.9 2:3.1 3:5.1 4:2.3 2 1:5.8 2:2.7 3:5.1 4:1.9 2 1:6.8 2:3.2 3:5.9 4:2.3 2 1:6.7 2:3.3 3:5.7 4:2.5 2 1:6.7 2:3 3:5.2 4:2.3 2 1:6.3 2:2.5 3:5 4:1.9 2 1:6.5 2:3 3:5.2 4:2 2 1:6.2 2:3.4 3:5.4 4:2.3 2 1:5.9 2:3 3:5.1 4:1.8
挺有意思,接下來就可以使用libsvm格式的資料進行機器學習模型的使用了。