Python 的 sklearn(DecisionTreeClassifier,SVM)之间的区别?
Difference between Python's sklearn (DecisionTreeClassifier, SVM)?
我是机器学习的新手 - 特别是分类技术。
我已经在线阅读了一些教程并且正在使用 iris data set。我尝试使用
将数据集分成训练和测试
train, test = train_test_split(df,
test_size=test_size,
train_size=train_size,
random_state=random_state)
随后,我找到了 2 种方法来拟合模型(DecisionTreeClassifier & SVM):
dt = DecisionTreeClassifier(min_samples_split=20, random_state=99)
clf = svm.SVC(kernel='linear', C=1)
两种模型都允许我使用 .fit() 和 .score() 方法。我尝试对具有不同大小和随机状态的数据进行重采样,但我得到的 2 个模型的分数完全相同,为 0.9852。难道我做错了什么?
此外,是否需要将我的目标变量 ("class") 转换为 here 所述的数值?我尝试用原始字符串值拟合数据框,但得到了相同的结果。非常感谢任何帮助!
train_test_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
底线:
在你的例子中,你只传递 X
train_test_split
中的 df
。
您不需要转换 类。只需使用 accuracy_score
或 cross_val_score
函数。
我是机器学习的新手 - 特别是分类技术。
我已经在线阅读了一些教程并且正在使用 iris data set。我尝试使用
将数据集分成训练和测试train, test = train_test_split(df,
test_size=test_size,
train_size=train_size,
random_state=random_state)
随后,我找到了 2 种方法来拟合模型(DecisionTreeClassifier & SVM):
dt = DecisionTreeClassifier(min_samples_split=20, random_state=99)
clf = svm.SVC(kernel='linear', C=1)
两种模型都允许我使用 .fit() 和 .score() 方法。我尝试对具有不同大小和随机状态的数据进行重采样,但我得到的 2 个模型的分数完全相同,为 0.9852。难道我做错了什么?
此外,是否需要将我的目标变量 ("class") 转换为 here 所述的数值?我尝试用原始字符串值拟合数据框,但得到了相同的结果。非常感谢任何帮助!
train_test_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
底线:
在你的例子中,你只传递 X
train_test_split
中的 df
。
您不需要转换 类。只需使用 accuracy_score
或 cross_val_score
函数。