Python和x27之间的区别;s sklearn(DecisionTreeClassifier,SVM)?

Python和x27之间的区别;s sklearn(DecisionTreeClassifier,SVM)?,python,machine-learning,scikit-learn,classification,decision-tree,Python,Machine Learning,Scikit Learn,Classification,Decision Tree,我不熟悉机器学习,特别是分类技术 我已经在网上阅读了一些教程,我正在使用。我尝试将数据集拆分为train并使用 train, test = train_test_split(df, test_size=test_size, train_size=train_size, random_state=random_st

我不熟悉机器学习,特别是分类技术

我已经在网上阅读了一些教程,我正在使用。我尝试将数据集拆分为train并使用

train, test = train_test_split(df,
                               test_size=test_size,
                               train_size=train_size,
                               random_state=random_state)
随后,我找到了两种方法来拟合模型(DecisionTreeClassifier和SVM):

这两种模型都允许我使用.fit()和.score()方法。我尝试过对不同大小和随机状态的数据进行重新采样,但在这两个模型中,我得到了完全相同的0.9852分。我做错什么了吗


此外,是否需要将目标变量(“类”)转换为所述的数值?我尝试用原始字符串值拟合数据帧,得到了相同的结果。非常感谢您的帮助

正确使用
train\u test\u split
的方法如下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

#Load Iris data, X: features and y:target/labels
df = load_iris()
y = df.target
X = df.data

#Split the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state= 99)

#Fit the 2 classifiers
dt = DecisionTreeClassifier(min_samples_split=20, random_state=99)
clf = SVC(kernel='linear', C=1)

dt.fit(X_train, y_train)
y_predicted_dt = dt.predict(X_test)
scores_dt = accuracy_score(y_test, y_predicted_dt)
print(scores_dt)

clf.fit(X_train, y_train)
y_predicted_clf = clf.predict(X_test)
scores_clf = accuracy_score(y_test, y_predicted_clf)
print(scores_clf)
结果:

#Accuracy of dt classifier
0.933333333333

#Accuracy of clf classifier
0.983333333333
底线:

#Accuracy of dt classifier
0.933333333333

#Accuracy of clf classifier
0.983333333333
在您的情况下,在
train\u test\u split
中,您仅以
X
的身份通过
df


您不需要转换thr类。只需使用
精度评分
交叉评分
功能。

正确使用
训练测试评分
的方法如下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

#Load Iris data, X: features and y:target/labels
df = load_iris()
y = df.target
X = df.data

#Split the data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state= 99)

#Fit the 2 classifiers
dt = DecisionTreeClassifier(min_samples_split=20, random_state=99)
clf = SVC(kernel='linear', C=1)

dt.fit(X_train, y_train)
y_predicted_dt = dt.predict(X_test)
scores_dt = accuracy_score(y_test, y_predicted_dt)
print(scores_dt)

clf.fit(X_train, y_train)
y_predicted_clf = clf.predict(X_test)
scores_clf = accuracy_score(y_test, y_predicted_clf)
print(scores_clf)
结果:

#Accuracy of dt classifier
0.933333333333

#Accuracy of clf classifier
0.983333333333
底线:

#Accuracy of dt classifier
0.933333333333

#Accuracy of clf classifier
0.983333333333
在您的情况下,在
train\u test\u split
中,您仅以
X
的身份通过
df


您不需要转换thr类。只需使用
准确性评分
交叉评分
功能。

该代码不完整…我使用相同的数据发布了一个答案,并解释了您所犯的错误代码不完整…我使用相同的数据发布了一个答案,并解释了您在
train\u test\u split
由于他的代码不完整,我不会说他只通过了X。训练时,他可能正在调用
train.data
train.target
,以及
test.data
test.target
。也许不是。@VivekKumar可能是这样,但由于他说“我尝试了对不同大小和随机状态的数据进行重新采样,但我得到了与这两个模型完全相同的0.9852分”,我的答案似乎接近实际情况。让我们等待提问者的反馈。@sera感谢您的回答!我想问一下,是否有必要将我的“类”列从iris数据集从字符串转换为整数,以便DT或SVM工作?您好。对于iris数据,类是y。y应该是一个numpy数组,其大小应该是(样本数,)。另一方面,X的大小应该是(样本数、特征数)。对于虹膜y是(159,)X是(150,4)。两个numpy数组。我刚刚试过SVC的工作原理,他在
列车测试中使用了
df
,由于他的代码不完整,我不会说他只通过了X。训练时,他可能正在调用
train.data
train.target
,以及
test.data
test.target
。也许不是。@VivekKumar可能是这样,但由于他说“我尝试了对不同大小和随机状态的数据进行重新采样,但我得到了与这两个模型完全相同的0.9852分”,我的答案似乎接近实际情况。让我们等待提问者的反馈。@sera感谢您的回答!我想问一下,是否有必要将我的“类”列从iris数据集从字符串转换为整数,以便DT或SVM工作?您好。对于iris数据,类是y。y应该是一个numpy数组,其大小应该是(样本数,)。另一方面,X的大小应该是(样本数、特征数)。对于虹膜y是(159,)X是(150,4)。两个numpy数组。我刚试过SVC很好用