python中的虹膜决策树

python中的虹膜决策树,python,pandas,dataframe,scikit-learn,decision-tree,Python,Pandas,Dataframe,Scikit Learn,Decision Tree,我正在努力学习决策树,最后我找到了一篇关于决策树的文章。这篇文章的目的是确定一朵花是否是鸢尾花,但我似乎遇到了一些错误,我希望有人能找到答案,我有两个错误,如下所示: iris:Bunch iris:tuple的内部实例没有“target”成员 及 iris:Bunch iris:tuple的内部实例没有“data”成员 我在x=iris.data行和y=iris.target行得到这些错误 代码如下: import warnings warnings.filterwarnings('ignor

我正在努力学习决策树,最后我找到了一篇关于决策树的文章。这篇文章的目的是确定一朵花是否是鸢尾花,但我似乎遇到了一些错误,我希望有人能找到答案,我有两个错误,如下所示:

iris:Bunch iris:tuple的内部实例没有“target”成员

iris:Bunch iris:tuple的内部实例没有“data”成员

我在x=iris.data行和y=iris.target行得到这些错误

代码如下:

import warnings
warnings.filterwarnings('ignore')

import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split

#load iris data
iris = datasets.load_iris()
x = iris.data
y = iris.target
d = [{"sepal_length":row[0], 
      "sepal_width":row[1], 
      "petal_length":row[2], 
      "petal_width":row[3]} for row in x]
df = pd.DataFrame(d) # construct dataframe
df["types"] = y # assign types
df = df.sample(frac=1.0) # random shuffle rows
df.head()

有人知道我为什么会出现这些错误吗?

您的错误消息表明有问题的值
iris
是一个元组,它没有您正在引用的属性。检查您正在使用的工具的文档;他们应该解释如何解包
数据集。将_iris()
加载到您需要的对象中。

在大多数情况下,我不会过滤警告,因为您可以从警告中获得有用的信息

因此,sklearn数据集格式是一个束,它是一个专门的容器对象,工作方式类似于字典。您可以使用点符号(例如iris.data)或字典符号(例如iris['data'])访问它。在这里,不清楚您的机器上的错误是什么,因为我(和其他评论员一样)在访问python 3.8.5中的iris.data或iris['data']时没有问题

我想让您知道几个地方来改进您的方法:

(1) 不清楚为什么需要构造数据帧,因为可以直接从连接的numpy数组上调用train_test_split获取所需的样本,或者直接从numpy数组获取索引的随机样本

(2) 构造数据帧的方法比需要的更复杂

import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split

# load iris data
iris = datasets.load_iris()

# train test split
X_train, y_train, X_test, y_test = train_test_split(iris.data, iris.target)

# random shuffle of data/target indices
rng = np.random.default_rng()
rng_size = iris.data.shape[0]
idx_sample = rng.choice(np.arange(rng_size), size=rng_size, replace=False)

# simpler way to create dataframe
# concatenate along the columns (axis 1)
# then set the column names in one place
df = pd.concat([pd.DataFrame(iris.data), pd.DataFrame(iris.target)], axis=1)
df.columns = ["sepal_length", "sepal_width", "petal_length", "petal_width", "types"]

此代码没有为我生成任何错误。根据您的
sklearn
版本,有一个
return\u X\u y
参数。请检查您从
load.iris()
获取的数据类型。它是元组还是数据帧?