讀取libsvm格式的資料集或將其轉換成csv格式

2021-09-26 05:51:31 字數 2556 閱讀 7006

在同一目錄下建立三個資料夾code,input,ouput

code

**資料夾,內含主程式load_libsvm.py

input

輸入:libsvm格式的資料集

output

輸出:轉換成csv格式的資料集

read_libsvm:讀取libsvm格式的資料集,返回svm(python sklearn)所需的訓練引數x和y。即可以直接讀取libsvm格式的資料集進行訓練。

tansfrom_libsvm:將libsvm格式的資料集轉換成csv格式的資料集

import csv

import numpy as np

from sklearn.svm import svc

def read_libsvm(input_file, max_feature):

"""讀取libsvm格式的資料集

:param input_file: 資料集檔名

:param max_feature: 資料集最大維

:return: svm的訓練引數x,y

"""count = 0#樣本個數

y=x=

path="../input/"

with open(path+input_file, 'r', newline='') as f:

reader = csv.reader(f, delimiter=" ")

# 每一行

for line in reader:

if(line[-1]==''):

line.pop(-1)#去掉末尾""空字元

# 獲取y

y_line=line.pop(0)

temp=0

temp_x=

# 獲取x

try:

for str in line:

index = int(str.split(":")[0])

value=float(str.split(":")[1])

# 沒列出的列全部為0

for j in range(temp,index):

if j

else:

temp=index

break

count += 1

except keyerror:

continue

# 補全每一行最後一維到最大維度的0值

for i in range(count):

for j in range(len(x[i]),max_feature):

y=np.array(y)

x=np.array(x).reshape(count,max_feature)

return x,y

def transform_libsvm(inputfile,max_feature):

"""將libsvm格式轉換成csv格式,保留原資料集

:param inputfile: libsvm格式的資料集

:param max_feature: 要轉換的資料集的最大維

:return: 輸出csv格式的資料集

"""path="../input/"

x,y=read_libsvm(path+inputfile,max_feature)

rows=x.shape[0]

columns=x.shape[1]

file=open("../output/"+inputfile+".csv","w+")

for r in range(rows):

r_line=""

for c in range(columns):

temp=str(x[r,c])+","

r_line+=temp

r_line+=str(y[r])

file.write(r_line+"\n")

file.close()

# if __name__ == '__main__':

# x,y=read_libsvm("a1a",123)

# transform_libsvm("a1a",123)

(1)引數與返回值:

(2)示例:讀取123維的資料集a1a

x,y=read_libsvm("a1a",123)

(3)呼叫方式:

直接在該程式中呼叫read_libsvm函式或在其他程式中通過from … import … 匯入該函式後再呼叫

(1)引數與返回值:

(2)示例:將a1a轉換成a1a.csv

transform_libsvm("a1a",123)

(3)呼叫方式:

直接在該程式呼叫transform_libsvm函式或在其他程式中通過from … import … 匯入該函式後再呼叫

ps.由於需要指定最大維,目前不支援批量轉換

libsvm資料格式

libsvm資料格式 libsvm資料格式 libsvm使用的訓練資料和檢驗資料檔案格式如下 label index1 value1 index2 value2 label index1 value1 index2 value2 label目標值,就是說class 屬於哪一類 就是你要分類的種類,通...

轉換資料為libsvm格式

開啟formatdatalibsvm.xls 啟用巨集,之後 一 xls轉 1 開啟xls資料檔案 注 網上介紹 直接將資料貼上到sheet1的topleft單元,將資料直接貼上到sheet1的左邊單元格 2 開發工具 巨集 formatdatatolibsvm 執行 二 txt,data轉 注 t...

libsvm的資料格式及製作

libsvm使用的訓練資料和檢驗資料檔案格式如下 label index1 value1 index2 value2 label index1 value1 index2 value2 label目標值,就是說class 屬於哪一類 就是你要分類的種類,通常是一些整數。index是有順序的索引,通常...