通过PyCall在Julia中使用scikit-learn

时间:2017-03-16 00:47:07

标签: python scikit-learn julia

我试图通过PyCall在Julia中使用Scikit-learn。

首先,我尝试将虹膜数据读入Julia数据结构。

这是Python中的代码:

from sklearn import datasets
from sklearn.naive_bayes import GaussianNB

iris = datasets.load_iris()

X = iris.data
y = iris.target

PyCall文档说在Python中调用Python方法,例如:

my_dna[:find]("ACT")

而不是:

my_dna.find("ACT")
在Python中

我尝试在Julia中导入虹膜数据是:

using PyCall
@pyimport sklearn.datasets as datasets
@pyimport sklearn.naive_bayes as NB

iris = datasets.load_iris()

X = ...?
Y = ...?

iris = datasets.load_iris()来电在irisDict{Any,Any}类型的情况下有效。

我不确定这是否正确。我尝试了iris = datasets[:load_iris],但结果是:

ERROR: LoadError: MethodError: no method matching getindex(::Module, ::Symbol)

更进一步,我如何将iris.datairis.target读入XY

2 个答案:

答案 0 :(得分:1)

正如你所说,朱莉娅告诉你user_link是什么类型:

iris

它还会告诉您词典中的键是什么。 所以现在你只需使用Julia的语法来访问字典中的值(结果剪切):

julia v0.5> @pyimport sklearn.datasets as datasets

julia v0.5> @pyimport sklearn.naive_bayes as NB

julia v0.5> iris = datasets.load_iris()
Dict{Any,Any} with 5 entries:
  "feature_names" => Any["sepal length (cm)","sepal width (cm)","petal length (…
  "target_names"  => PyObject array(['setosa', 'versicolor', 'virginica'], …
  "data"          => [5.1 3.5 1.4 0.2; 4.9 3.0 1.4 0.2; … ; 6.2 3.4 5.4 2.3; 5.…
  "target"        => [0,0,0,0,0,0,0,0,0,0  …  2,2,2,2,2,2,2,2,2,2]
  "DESCR"         => "Iris Plants Database\n====================\n\nNotes\n----…

请注意,我不知道这个问题的答案。我让朱莉娅指导我做什么。

最后,正如@ChrisRackauckas所建议的那样,已经有一个包裹scikit-learn的Julia软件包:https://github.com/cstjean/ScikitLearn.jl

答案 1 :(得分:1)

由于进行了一些更改,除了Davids的答案,我想添加PyCall(当前的版本1.91.4)的当前语法。

python代码

from sklearn import datasets
from sklearn.naive_bayes import GaussianNB

iris = datasets.load_iris()

X = iris.data
y = iris.target

成为朱莉娅:

using PyCall
datasets = pyimport("sklearn.datasets")
GaussianNB = pyimport("sklearn.naive_bayes")
iris = datasets.load_iris()
X = iris["data"]
y = iris["target"]