如何使用MLlib运行决策树?

我之前使用Scikit-learn来运行机器学习算法,所以MLlib对我来说是比较新的。尽管如此,我确实尝试了Cloudera最近一次演讲中的github项目,并留下了疑问。

假设我使用决策树进行二元分类。我想预测一个物体是苹果还是橙子。特征部分的两个参数是一个列表[x(浮点数), y(二元)]。X表示物体的重量,y表示0或1(光滑或凹凸)。

然后我有一个也是二元的标签列表,(0 = 苹果, 1 = 橙子)。当我使用Scikit-learn时,我会将它们保存成如下形式:

features_list = [[140, 0], [150, 0], [160, 1], [170, 1]]labels = [0, 0, 1, 1]

在这个例子中,每个标签0或1对应features_list中的一个项目。所以第一个0是特征[140, 0]的标签,依此类推。

当我训练模型时,我的代码如下所示:

clf = tree.DecisionTreeClassifier()clf = clf.fit(ml_list, labels)

当我进行预测时,我会写这样的代码:

print(clf.predict([180, 1])

查阅MLlib文档时,似乎参数是’labelscol’和’featurescol’。我尝试将ml_list和labels传递给这些参数,但抛出了错误。

我的问题是,有没有办法像我在Scikit-learn中那样,使用这两个列表在MLlib中运行机器学习算法?任何帮助都将不胜感激!


回答:

你应该使用ML(即基于DataFrame的API)而不是MLlib,因为后者即将被弃用

spark.version# u'2.2.0'from pyspark.ml.linalg import Vectorsfrom pyspark.ml.classification import DecisionTreeClassifierfeatures_list = [[140, 0], [150, 0], [160, 1], [170, 1]]labels = [0, 0, 1, 1]dd = [(labels[i], Vectors.dense(features_list[i])) for i in range(len(labels))]dd# [(0, DenseVector([140.0, 0.0])), #  (0, DenseVector([150.0, 0.0])), #  (1, DenseVector([160.0, 1.0])), #  (1, DenseVector([170.0, 1.0]))]df = spark.createDataFrame(sc.parallelize(dd),schema=["label", "features"])dt = DecisionTreeClassifier(maxDepth=2, labelCol="label")model = dt.fit(df)# 在训练集上进行预测model.transform(df).show()  # 在Spark ML中使用'transform'而不是'predict'# +-----+-----------+-------------+-----------+----------+# |label|   features|rawPrediction|probability|prediction|      # +-----+-----------+-------------+-----------+----------+# |    0|[140.0,0.0]|    [2.0,0.0]|   [1.0,0.0]|      0.0|# |    0|[150.0,0.0]|    [2.0,0.0]|   [1.0,0.0]|      0.0| # |    1|[160.0,1.0]|    [0.0,2.0]|   [0.0,1.0]|      1.0| # |    1|[170.0,1.0]|    [0.0,2.0]|   [0.0,1.0]|      1.0|     # +-----+-----------+-------------+-----------+----------+# 在测试集上进行预测:test = spark.createDataFrame([(Vectors.dense(180, 1),)], ["features"])model.transform(test).show() # +-----------+-------------+-----------+----------+# |   features|rawPrediction|probability|prediction|# +-----------+-------------+-----------+----------+ # |[180.0,1.0]|    [0.0,2.0]|  [0.0,1.0]|       1.0| # +-----------+-------------+-----------+----------+     

编辑:这是如何初始化Spark的方式:

from pyspark import SparkContext, SparkConffrom pyspark.sql import SparkSessionconf = SparkConf()sc = SparkContext(conf=conf)spark = SparkSession.builder.config(conf=conf).getOrCreate()

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注