有一个研究案例,需要一些帮助。我有2个分类器,LogisticRegress和DeciestReeClalefier,具有深度3.需要在每个类中生成3个数据集1000x2,500个对象。第一个数据集应具有LR和SCORE&LT的得分> 0.9;0.7使用树木,第二个数据集应相反。第三应该有得分<两者都有0.7。对于这个问题,可以忽略过度拟合。有什么想法吗?
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
clf1 = LogisticRegression(penalty='l2',C=1e9) # very weak l2-regularization
clf2 = DecisionTreeClassifier(max_depth=3)
import numpy as np
y = np.zeros(1000)
y[500:] = 1.
#should change this
x1 = np.zeros((1000,2))
x2 = np.zeros((1000,2))
x3 = np.zeros((1000,2))
clf_names = ['LogReg', 'DT']
clfs = [clf1, clf2]
for dataset in [x1,x2,x3]:
for i in range(2):
print (clf_names[i], round(clfs[i].fit(dataset,y).score(dataset,y),3))
LogReg 0.5
DT 0.5
LogReg 0.5
DT 0.5
LogReg 0.5
DT 0.5
我可以为您提供可能根据我的理解而起作用的方法,但不能给您代码:D
逻辑回归和决策树之间的主要区别:1(logistic回归绘制直线以区分2类,其中决策树当无法区分2个类直线时,决策树可能很有用。您可以在这种情况下使用决策树,因为它可以给出非线性边界以区分类别。
方法: - 尝试从Python的随机模块生成数据集,并使用Matplotlib(根据您的决策变量y使用2种不同的颜色进行分类(。 - 从情节看,如果您不可能通过直线区分两类,而决策树的性能要比逻辑回归更好,反之亦然。
找出逻辑回归比决策树更好的方案要困难。
当数据随机分布时,两者都会表现最差,并且不可能通过直线/多项式曲线将其分开。
。
这是简单的解决方案:
x1 = np.linspace(0,1,2000)
x1[1000:] = np.linspace(0,1,1000)
x1[1500:] = np.linspace(0,1,500)
x1 = x1.reshape((1000,2))
x2 = np.ones((2000, 1))
x2[500:] = np.full((1500,1), -3)
x2[1000:] = np.full((1000,1), -1)
x2 = x2.reshape(1000,2)
x3 = np.random.randint(0,100,2000).reshape(1000,2)
给出:
LogReg 1.0
DT 0.627
LogReg 0.5
DT 1.0
LogReg 0.518
DT 0.555