我通过scikit-learn图书馆学习机器学习.我使用以下代码将决策树分类器和随机森林分类器应用于我的数据:
def decision_tree(train_X, train_Y, test_X, test_Y):
clf = tree.DecisionTreeClassifier()
clf.fit(train_X, train_Y)
return clf.score(test_X, test_Y)
def random_forest(train_X, train_Y, test_X, test_Y):
clf = RandomForestClassifier(n_estimators=1)
clf = clf.fit(X, Y)
return clf.score(test_X, test_Y)
Run Code Online (Sandbox Code Playgroud)
为什么随机森林分类器的结果更好(100次运行,随机抽样2/3的数据用于训练,1/3用于测试)?
100%|???????????????????????????????????????| 100/100 [00:01<00:00, 73.59it/s]
Algorithm: Decision Tree
Min : 0.3883495145631068
Max : 0.6476190476190476
Mean : 0.4861783113770316
Median : 0.48868030937802126
Stdev : 0.047158171852401135
Variance: 0.0022238931724605985
100%|???????????????????????????????????????| 100/100 [00:01<00:00, 85.38it/s]
Algorithm: Random Forest
Min : 0.6846846846846847
Max : 0.8653846153846154
Mean : 0.7894823428836184
Median : 0.7906101571063208
Stdev : 0.03231671150915106
Variance: 0.0010443698427656967 …Run Code Online (Sandbox Code Playgroud) python machine-learning decision-tree random-forest scikit-learn
我正在阅读有关决策树和装袋分类器的内容,并且我试图展示装袋分类器中使用的第一个决策树。我对输出感到困惑。
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_moons
from sklearn.ensemble import BaggingClassifier
from sklearn import tree
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import export_graphviz
from graphviz import Source
X, y = make_moons(n_samples=500, noise=0.30, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
bag_clf = BaggingClassifier(
DecisionTreeClassifier(),
n_estimators=500,
max_samples=100,
bootstrap=True,
n_jobs=-1)
bag_clf.fit(X_train, y_train)
Source(tree.export_graphviz(bag_clf.estimators_[0], out_file=None))
Run Code Online (Sandbox Code Playgroud)
这是输出的一个片段
据我了解,value应该显示有多少样本被分类为每个类别。那么,value字段中的数字不应该加到字段中吗samples?为什么这里的情况不是这样呢?
在使用 RandomForestRegressor 时,我注意到一些奇怪的事情。为了说明问题,这里有一个小例子。我在测试数据集上应用了 RandomForestRegressor 并绘制了森林中第一棵树的图。这给了我以下输出:
Root_node:
mse=8.64
samples=2
value=20.4
Left_leaf:
mse=0
samples=1
value=24
Right_leaf:
mse=0
samples=1
value=18
Run Code Online (Sandbox Code Playgroud)
首先,我希望根节点的值为(24+18)/2=21。但不知何故,它是 20.4。但是,即使这个值是正确的,我如何获得 8.64 的 mse?从我的角度来看,它应该是:(1/2[(24-20.4)^2+(18-20.4)^2]=9.36假设根值 20.4 是正确的)
我的解决办法是:1/2[(24-21)^2+(18-21)^2]=9。如果我只使用 DecisionTreeRegressor,这也是我得到的结果。
RandomForestRegressor 的实现有什么问题还是我完全错了?
这是我的可重现代码:
import pandas as pd
from sklearn import tree
from sklearn.ensemble import RandomForestRegressor
import graphviz
# create example dataset
data = {'AGE': [91, 42, 29, 94, 85], 'TAX': [384, 223, 280, 666, 384], 'Y': [19, 21, 24, 13, 18]}
df = pd.DataFrame(data=data)
x = df[['AGE','TAX']]
y …Run Code Online (Sandbox Code Playgroud) 我正在研究DecisionTreeClassifier模型,我想了解模型选择的路径.所以我需要知道什么价值给了
DecisionTreeClassifier.tree_.value
Run Code Online (Sandbox Code Playgroud)
谢谢,