首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何最好地洗牌火花放电中的列以计算排列特征的重要性

如何最好地洗牌火花放电中的列以计算排列特征的重要性
EN

Stack Overflow用户
提问于 2022-01-05 00:27:26
回答 1查看 310关注 0票数 0

看起来,吡火花ML没有一个内置的排列特征重要性方法。因此,我希望对此进行编码,为此,我必须对dataframe中的每一列进行单独的洗牌。我发现this资源是实现这一目标的一种方式。然而,对于一个大型的数据帧来说,它的计算量似乎非常大。有更好的办法吗?

例如,下面是一个示例,说明我如何在简单的pyspark df中洗牌列df。然后,我将在df上使用a混搭计算模型性能。接下来,我将做同样的事情来洗牌b,然后计算模型性能,等等.有更好的办法吗?

代码语言:javascript
复制
import pandas as pd
from pyspark.sql.functions import row_number, lit

# Create Pandas DF
df = pd.DataFrame({
  'a': [1,5,4,3,5,7],
  'b': ['a','b','a','c','d','b'],
  'c': [400, 200, 150, 300, 174, 225]
})

# Convert to PySpark
df = spark.createDataFrame(df)

# Create 'index' column to join
window = Window().orderBy(lit('A'))
df = df.withColumn('index', row_number().over(window))

# Shuffle just column 'a' in a new dataframe and add 'index'
df_a = df.select('a').withColumn('rand', rand(seed=83)).orderBy('rand')\
  .drop('rand')\
  .withColumnRenamed('a', 'a2')\
  .withColumn('index', row_number().over(window))

# Replace 'a' in df with the shuffled 'a' from df_a
df = df.join(df_a, on=['index']).drop('a').withColumnRenamed('a2', 'a').show()

+-----+---+---+---+
|index|  b|  c|  a|
+-----+---+---+---+
|    1|  a|400|  5|
|    2|  b|200|  1|
|    3|  d|174|  5|
|    4|  c|300|  3|
|    5|  b|225|  4|
|    6|  a|150|  7|
+-----+---+---+---+
EN

回答 1

Stack Overflow用户

发布于 2022-01-05 10:02:40

星火数据格式是无序的,因此这些类型的转换总是很昂贵的。

你可能想要考虑转换成熊猫做洗牌部分,然后再转换回火种:

代码语言:javascript
复制
import numpy as np

pdf = df.toPandas()

pdf["a"] = np.random.permutation(pdf["a"].values)
pdf["b"] = np.random.permutation(pdf["b"].values)

df1 = spark.createDataFrame(pdf)

df1.show()
#+---+---+---+
#|  a|  b|  c|
#+---+---+---+
#|  3|  b|400|
#|  4|  a|200|
#|  5|  d|150|
#|  5|  c|300|
#|  1|  b|174|
#|  7|  a|225|
#+---+---+---+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70586543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档