将带有分类数据的 csv 转换为 libsvm

     2023-03-12     120

关键词:

【中文标题】将带有分类数据的 csv 转换为 libsvm【英文标题】:Convert csv with categorical data to libsvm 【发布时间】:2015-10-05 09:30:42 【问题描述】:

我正在使用spark MLlib 构建机器学习模型。如果数据中有分类变量,我需要提供libsvm 格式文件作为输入。

我尝试将 csv 文件转换为 libsvm 使用 1. Convert.clibsvm 网站上的建议 2. Csvtolibsvm.py in phraug github

但这两个脚本似乎都没有转换分类数据。 我还安装了weka 并尝试保存为libsvm 格式。但在weka explorer 中找不到该选项。

请提出任何其他将带有分类数据的csv 转换为libsvm 格式的方法,或者如果我在这里遗漏任何内容,请告诉我。

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

我猜你想训练一个 SVM。它需要一个 rdd [LabeledPoint] 的输入。

https://spark.apache.org/docs/1.4.1/api/scala/#org.apache.spark.mllib.classification.SVMWithSGD

我建议您将分类列与此处的第二个答案类似:

How to transform a categorical variable in Spark into a set of columns coded as 0,1?

LogisticRegression 案例与 SVM 案例非常相似。

【讨论】:

【参考方案2】:

您可以尝试使用哈希技巧将分类特征转换为数字,然后如果 order 确实将函数映射到每一行,则将数据帧转换为 rdd。 下面的假例子是使用 pyspark 解决的。

例如转换的数据框是df:

>> df.show(5)

+------+----------------+-------+-------+
|gender|            city|country|     os|
+------+----------------+-------+-------+
|     M|         chennai|     IN|ANDROID|
|     F|       hyderabad|     IN|ANDROID|
|     M|leighton buzzard|     GB|ANDROID|
|     M|          kanpur|     IN|ANDROID|
|     F|       lafayette|     US|    IOS|
+------+----------------+-------+-------+

我想使用特征:yob、city、country 来预测性别。

import hashlib
from pyspark.sql import Row
from pyspark.ml.linalg import SparseVector

spark = SparkSession \
    .builder \
    .appName("Spark-app")\
     .config("spark.some.config.option", "some-value")\
    .getOrCreate() # create the spark session

NR_BINS = 100000 # the total number of categories, it should be a big number if you have many different categories in each feature and a lot of categorical features. in the meantime do consider the memory.

def hashnum(input):
    return int(hashlib.md5(input).hexdigest(), 16)%NR_BINS + 1

def libsvm_converter(row):
    target = "gender"
    features = ['city', 'country', 'os']
    if row[target] == "M":
        lab = 1
    elif row[target] == "F":
        lab = 0
    else:
        return
    sparse_vector = []
    for f in features:
        v = '-'.format(f, row[f].encode('utf-8'))
        hashv = hashnum(v) # the index in libsvm
        sparse_vector.append((hashv, 1)) # the value is always 1 because of categorical feature
    sparse_vector = list(set(sparse_vector)) # in case there are ***es (BR_BINS not big enough)
    return Row(label = lab, features=SparseVector(NR_BINS, sparse_vector))


libsvm = df.rdd.map(libsvm_converter_2)
data = spark.createDataFrame(libsvm)

如果你检查数据,它看起来像这样;

>> data.show()
+--------------------+-----+
|            features|label|
+--------------------+-----+
|(100000,[12626,68...|    1|
|(100000,[59866,68...|    0|
|(100000,[66386,68...|    1|
|(100000,[53746,68...|    1|
|(100000,[6966,373...|    0|
+--------------------+-----+

【讨论】:

将分类数据转换为数字并保存为 libsvm 格式 python

】将分类数据转换为数字并保存为libsvm格式python【英文标题】:turncategoricaldatatonumericandsavetolibsvmformatpython【发布时间】:2017-02-1304:41:44【问题描述】:我有一个看起来像这样的DataFrame:ABCD1String1String2String3String42String2String3String4S... 查看详情

带有 LIBSVM 数据错误的 Spark 决策树

】带有LIBSVM数据错误的Spark决策树【英文标题】:SparkDecisionTreewithLIBSVMdataerror【发布时间】:2016-08-2602:21:50【问题描述】:我使用Python将CSV转换为LIBSVM数据格式。LIBSVM的格式如下所示。第一列是目标。00:11:22:14:116:47:78:19:9910:7011:10... 查看详情

LIBSVM 如何准备带有图像的训练数据集以进行徽标检测?

】LIBSVM如何准备带有图像的训练数据集以进行徽标检测?【英文标题】:LIBSVMhowtopreparetrainingdatasetwithimagesforlogodetection?【发布时间】:2013-07-2520:51:26【问题描述】:任务:我有更多从视频(视频帧)中拍摄的10万张图像,我需要... 查看详情

如何从 libSVM 中使用的数据集转换为 weka 中使用的格式数据(*.arff 或 *.csv)

】如何从libSVM中使用的数据集转换为weka中使用的格式数据(*.arff或*.csv)【英文标题】:howtoconvertfromdatasetusinginlibSVMtofomatdatausinginweka(*.arffor*.csv)【发布时间】:2018-04-1721:15:20【问题描述】:我想使用数据集是Weka工具的libSVM的输... 查看详情

LIBSVM 数据准备:将 Excel 数据转换为 LIBSVM 格式

】LIBSVM数据准备:将Excel数据转换为LIBSVM格式【英文标题】:LIBSVMDataPreparation:ExceldatatoLIBSVMformat【发布时间】:2017-03-1902:45:47【问题描述】:我想研究如何执行LIBSVM进行回归,我目前正忙于准备数据。目前我有这种.csv和.xlsx格式... 查看详情

如何使用 python 和 pandas 将 Csv 文件转换为 libsvm?

】如何使用python和pandas将Csv文件转换为libsvm?【英文标题】:howtoconvertCsvfiletolibsvmusingpythonandpandas?【发布时间】:2018-11-2407:03:43【问题描述】:我有一个csv文件,我需要将其转换为libsvm格式,因此我编写了一个python脚本来进行所... 查看详情

在带有 Excel 数据的 Matlab 中使用 lbsvm

】在带有Excel数据的Matlab中使用lbsvm【英文标题】:UsinglbsvminMatlabwithExceldata【发布时间】:2014-04-1406:41:59【问题描述】:我的数据在Excel中,因此要将它们转换为Libsvm格式,我将Excel工作表转换为CSV格式并按照Libsvm网站上的程序进... 查看详情

libsvm文件转换为csv格式(代码片段)

SparkMLlib的官方例子里面提供的数据大部分是libsvm格式的。这其实是一种非常蛋疼的文件格式,和常见的二维表格形式相去甚远,下图是里面的一个例子:libsvm文件的基本格式如下:<label><index1>:<value1><index2>:<v... 查看详情

Libsvm - 预测结果为 NULL

...下说明:我有csv文件(+20K行),列(目标)中的大部分数据为零,其他值在0-10之间。我通过选择此列作为标签将csv文件转换为libsvm数据。当我缩放数据时,我使用这些参数$sv 查看详情

使用 libsvm 进行情绪分类

】使用libsvm进行情绪分类【英文标题】:Moodclassificationusinglibsvm【发布时间】:2017-03-0514:00:33【问题描述】:我想在音频数据检测上应用SVM。我正在从语音信号中提取不同的特征。在减少了这个矩阵的维度之后,我仍然得到了一... 查看详情

将数据帧转换为 libsvm 格式

】将数据帧转换为libsvm格式【英文标题】:convertdataframetolibsvmformat【发布时间】:2017-10-1017:36:14【问题描述】:我有一个由sql查询产生的数据框df1=sqlContext.sql("select*fromtable_test")我需要将此数据帧转换为libsvm格式,以便可以将其... 查看详情

CSV 到 LIBSVM 使用 phraug

...CSV文件转换为LIBSVM。(https://github.com/zygmuntz/phraug)这是我的数据集,其中包含第一个位置的标签和标题:https://www.dropbox.com/s/j4wsh5pde76o8ax/a 查看详情

如何将回归数据转换为分类数据? [关闭]

...ed]【发布时间】:2021-10-2422:48:09【问题描述】:我有一个带有列的数据[\'symboling\',\'Company\',\'fueltype\',\'aspiration\',\'doornumber\',\'carbody\',\'drivewhe 查看详情

多类 SVM。二元决策树。 LIBSVM 的问题

...】:所以我正在尝试实现一个多类SVM。Matlab不喜欢将数据分类为两个以上的类,因此我使用二元决策树对数据进行分类。我有三个类,我将数据分成两个和一个,然后我将使用SVM对第一个结果进行分类,然后将其结果分类到一个... 查看详情

无法将数据流从 AJAX 响应转换为 CSV 文件

...描述】:我正在尝试将ajax响应转换为csv文件,该响应是带有一些垃圾字符(可能是blob或字节流或字节数组不确定)的数据流。在下载的文件中,我也得到了相同的垃圾数据。$.ajax(url:requestUrl,type:"P 查看详情

python+libsvm-2(实例-使用libsvm对鸢尾花进行分类)

参考技术A这里使用的是lab课上老师提供的数据集但是不符合libsvm中要求的数据格式,所以需要将原始数据转换成libsvm中要求的。复制Excel表格中的数据到一个新的txt文件中我这里把原来的数据集分成了两个,一个用作train一个用... 查看详情

将带有字典列表的 defaultdict(list) 字典转换为 csv 的最佳方法

】将带有字典列表的defaultdict(list)字典转换为csv的最佳方法【英文标题】:Bestwaytoconvertadefaultdict(list)dictionarywithlistofdictionariestoacsv【发布时间】:2022-01-2001:23:05【问题描述】:我的默认字典有一个地址键,并且有一个与该键匹配... 查看详情

将带有标题的csv转换为哈希数组

TobeimprovedtoworkwithfasterCSVrequire'csv' csv_data=CSV.read'data.csv'headers=csv_data.shift.map{|i|i.to_s}string_data=csv_data.map{|row|row.map{|cell|cell.to_s}}array_of_hashes=string_data.map{|row|Hash[*headers.zip(row).flatten]} 查看详情