是否可以使用python -c执行作为字符串传递的python命令?有谁可以举个例子.
我一直在尝试在PySpark上做一个简单的随机森林回归模型.我对R机器学习有很好的体验.但是,对我来说,Pyspark上的ML看起来完全不同 - 特别是在处理分类变量,字符串索引和OneHotEncoding时(当只有数字变量时,我能够仅通过以下示例执行RF回归).虽然有很多可用于处理分类变量的例子,例如this和this,但我没有成功,因为大多数都超过我的头脑(可能是因为我不熟悉Python ML).我将非常感谢任何可以帮助解决这个问题的人.
这是我的尝试:inputfile在这里
from pyspark.mllib.linalg import Vectors
from pyspark.ml import Pipeline
from pyspark.ml.feature import StringIndexer, VectorIndexer
from pyspark.ml.classification import DecisionTreeClassifier
from pyspark.ml.tuning import CrossValidator, ParamGridBuilder
from pyspark.ml.evaluation import MulticlassClassificationEvaluator
from pyspark.sql.types import Row
from pyspark.sql.functions import col, round
train = sqlContext.read.format('com.databricks.spark.csv').options(header='true',inferschema = "true").load('filename.csv')
train.cache()
train.dtypes
Run Code Online (Sandbox Code Playgroud)
输出是:
DataFrame[ID: int, Country: string, Carrier: double, TrafficType: string, ClickDate: timestamp, Device: string, Browser: string, OS: string, RefererUrl: string, UserIp: string, ConversionStatus: string, ConversionDate: string, ConversionPayOut: string, publisherId: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Pyspark中进行RandomForest回归。因为大多数变量都是具有许多因子级别的分类变量,所以我不得不对它们进行字符串索引,一键编码并使用Vectorassembler创建一列特征向量。Vectorassembler的输出是在训练数据框中创建“功能”列。train_OHE在完成上述所有转换之后,我们仅将此数据框称为。
我的代码可以正常工作。
现在,当我运行randomforest回归器时,似乎出现了一个奇怪的错误。 scala.MatchError: [null,(1598,[0,2,234,274,295,1596],[1.0,1.0,1.0,1.0,1.0,1.0])] (of class org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema)
当我运行时train_OHE.show(),“功能”列中的前20个元素都看起来像[1598,[0,2,234,274,295,1596],[1.0,1.0,1.0,1.0,1.0,1.0]]-由于稀疏的矢量表示,因此可以接受。
我认为这是因为null其中一行中某处有多余的元素。
因此,我的问题是如何找出数据框中的哪一行导致了此问题。如果使用的是名义上的字符串,我会使用train_OHE['features'].like('%null%')。在这种稀疏的向量元素的情况下,如何找出这个故障行呢?我试过,train_OHE['features'].split(',').like('%null%')但出错了。
我想在 Pyspark 上运行随机森林算法。Pyspark 文档中提到VectorAssembler 仅接受数字或布尔数据类型。因此,如果我的数据包含 Stringtype 变量,例如城市名称,我是否应该对它们进行 one-hot 编码,以便进一步进行随机森林分类/回归?
这是我一直在尝试的代码,输入文件在这里:
train=sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('filename')
drop_list = ["Country", "Carrier", "TrafficType","Device","Browser","OS","Fraud","ConversionPayOut"]
from pyspark.sql.types import DoubleType
train = train.withColumn("ConversionPayOut", train["ConversionPayOut"].cast("double"))#only this variable is actually double, rest of them are strings
junk = train.select([column for column in train.columns if column in drop_list])
transformed = assembler.transform(junk)
Run Code Online (Sandbox Code Playgroud)
我不断收到错误消息IllegalArgumentException: u'Data type StringType is not supported.'
PS:抱歉问了一个基本问题。我来自 R 背景。在R中,当我们进行随机森林时,不需要将分类变量转换为数值变量。
我正在尝试查看可以使用 Julia 精确表示的最大正整数的位串。维基百科说 2^1024 * (1-2^(-53)) 是整数。但是,当我尝试使用 Julia 时,位串全为零。
julia> bitstring(Float64( 2^1024 - 2^971 ))
"0000000000000000000000000000000000000000000000000000000000000000"
Run Code Online (Sandbox Code Playgroud)
我期待的位串是
0 11111111110 1111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
你能帮我澄清为什么会发生这种差异吗?
我正在尝试使用scikit learnPython 中的包计算两组观察值之间的调整互信息(AMI)。
观察结果如下:
观察1: https: //pastebin.com/eiN88UrL
观察2: https: //pastebin.com/zx9Ath60
我运行以下代码,得到一个负 AMI,这在理论上是不可能的。你能帮我弄清楚我做错了什么吗?
from sklearn.metrics.cluster import adjusted_mutual_info_score
def amis(x, y):
return adjusted_mutual_info_score(x, y)
Run Code Online (Sandbox Code Playgroud)