我想比较不同分类器的不同错误率与弱学习者的错误率(优于随机猜测).所以,我的问题是,对于一个简单,易于处理的弱学习者,有哪些选择?或者,我是否理解错误的概念,并且我选择的任何基准测试都是弱学习者(例如,线性回归)?
我正在尝试解决回归任务.我发现有3个模型可以很好地处理不同的数据子集:LassoLARS,SVR和Gradient Tree Boosting.我注意到,当我使用所有这3个模型进行预测然后制作一个"真实输出"表和我的3个模型的输出时,我看到每次至少有一个模型真的接近真实输出,但是其他2个模型可能相对较远.
当我计算最小可能的错误时(如果我从每个测试示例的'最佳'预测器中获取预测),我得到的错误远小于任何模型的错误.所以我想到尝试将这3种不同模型的预测结合到某种集合中.问题是,如何正确地做到这一点?我的所有3个模型都是使用scikit-learn构建和调整的,它是否提供某种方法可用于将模型打包到整体中?这里的问题是我不想仅仅平均来自所有三个模型的预测,我想用加权来做这个,其中加权应该基于特定示例的属性来确定.
即使scikit-learn没有提供这样的功能,如果有人知道如何通过属性来解决这个任务,那就更好了 - 找出数据中每个例子的每个模型的权重.我认为它可以通过在所有这3个模型之上构建的单独的回归器来完成,它将尝试为3个模型中的每个模型输出最佳权重,但我不确定这是否是这样做的最佳方式.
我正在做一个文本分类任务.现在我想ensemble.AdaBoostClassifier用LinearSVCas base_estimator.但是,当我尝试运行代码时
clf = AdaBoostClassifier(svm.LinearSVC(),n_estimators=50, learning_rate=1.0,    algorithm='SAMME.R')
clf.fit(X, y)
发生错误. TypeError: AdaBoostClassifier with algorithm='SAMME.R' requires that the weak learner supports the calculation of class probabilities with a predict_proba method
第一个问题是无法svm.LinearSVC()计算类概率?如何计算概率?
然后我更改参数algorithm并再次运行代码.
clf = AdaBoostClassifier(svm.LinearSVC(),n_estimators=50, learning_rate=1.0, algorithm='SAMME')
clf.fit(X, y)
这一次TypeError: fit() got an unexpected keyword argument 'sample_weight'发生了.正如在AdaBoostClassifier中所说,Sample weights. If None, the sample weights are initialized to 1 / n_samples.即使我分配了一个整数n_samples,也会发生错误.
第二个问题是什么n_samples意思?如何解决这个问题呢? …
我试图使用分类变量训练使用GradientBoostingClassifier的模型.
以下是原始代码示例,仅用于尝试输入分类变量GradientBoostingClassifier.
from sklearn import datasets
from sklearn.ensemble import GradientBoostingClassifier
import pandas
iris = datasets.load_iris()
# Use only data for 2 classes.
X = iris.data[(iris.target==0) | (iris.target==1)]
Y = iris.target[(iris.target==0) | (iris.target==1)]
# Class 0 has indices 0-49. Class 1 has indices 50-99.
# Divide data into 80% training, 20% testing.
train_indices = list(range(40)) + list(range(50,90))
test_indices = list(range(40,50)) + list(range(90,100))
X_train = X[train_indices]
X_test = X[test_indices]
y_train = Y[train_indices]
y_test = Y[test_indices]
X_train = pandas.DataFrame(X_train) …python machine-learning decision-tree scikit-learn ensemble-learning
有人可以告诉我如何使用部分适合使用sklearn中的合奏.我不想重新训练我的模型.或者,我们可以通过预先训练的模型进行整合吗?我已经看到投票分类器例如不支持使用部分拟合的训练.
我正在使用Adaboost来解决分类问题.我们可以做到以下几点:
ens = fitensemble(X, Y, 'AdaBoostM1', 100, 'Tree')
现在'Tree'是学习者,我们可以将其改为'Discriminant'或'KNN'.每个学习者都使用一定的Template Object Creation Function.更多信息在这里.
是否可以创建自己的功能并将其用作学习者?如何?
我想merf在集成模型中使用(混合效应随机森林)库,例如通过使用mlens或mlxtendpython 库。然而,由于拟合和预测方法的merf结构采用非传统方式,我无法弄清楚如何做到这一点:
from merf import MERF
merf = MERF()
merf.fit(X_train, Z_train, clusters_train, y_train)
y_hat = merf.predict(X_test, Z_test, clusters_test)
有没有办法merf在集成模型中使用该库?问题在于,使用mlens或其他集成库构建集成模型会假定 scikit-learn 结构,其中 fit 方法将X,y作为输入,预测方法将 ,X作为输入。然而,merf显然在拟合和预测方法中都有更多的输入。这是一个简化的语法mlens:
from mlens.ensemble import SuperLearner 
ensemble = SuperLearner()
ensemble.add(estimators)
ensemble.add_meta(meta_estimator)
ensemble.fit(X, y).predict(X)
我不限于使用mlens或mlxten。任何其他构建集成模型的方法merf也可以。
我正在尝试使用scikit-learn中的VotingClassifier()创建三个分类器(随机森林,支持向量机和XGBoost)的集合.但是,我发现整体的准确性实际上是降低而不是增加.我无法弄清楚为什么.
这是代码:
from sklearn.ensemble import VotingClassifier
eclf = VotingClassifier(estimators=[('rf', rf_optimized), ('svc', svc_optimized), ('xgb', xgb_optimized)], 
                        voting='soft', weights=[1,1,2])
for clf, label in zip([rf, svc_optimized, xgb_optimized, eclf], ['Random Forest', 'Support Vector Machine', 'XGBoost', 'Ensemble']):
    scores = cross_val_score(clf, X, y, cv=10, scoring='accuracy')
    print("Accuracy: %0.3f (+/- %0.3f) [%s]" % (scores.mean(), scores.std(), label))
XGBoost具有最高的准确度,所以我甚至尝试给它更多的重量无济于事.
我能做错什么?
python machine-learning scikit-learn ensemble-learning xgboost
我尝试在scikit-learn中使用GradientBoostingClassifier,它的默认参数工作正常.但是,当我尝试用不同的分类器替换BaseEstimator时,它不起作用并且给了我以下错误,
return y - np.nan_to_num(np.exp(pred[:, k] -
IndexError: too many indices
你有解决问题的方法吗?
可以使用以下代码段重新生成此错误:
import numpy as np
from sklearn import datasets
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.utils import shuffle
mnist = datasets.fetch_mldata('MNIST original')
X, y = shuffle(mnist.data, mnist.target, random_state=13)
X = X.astype(np.float32)
offset = int(X.shape[0] * 0.01)
X_train, y_train = X[:offset], y[:offset]
X_test, y_test = X[offset:], y[offset:]
### works fine when init is None
clf_init = None
print 'Train with clf_init = None'
clf = GradientBoostingClassifier( …python numpy machine-learning scikit-learn ensemble-learning
我正在尝试在keras中创建我的第一个合奏模型。我的数据集中有3个输入值和一个输出值。
from keras.optimizers import SGD,Adam
from keras.layers import Dense,Merge
from keras.models import Sequential
model1 = Sequential()
model1.add(Dense(3, input_dim=3, activation='relu'))
model1.add(Dense(2, activation='relu'))
model1.add(Dense(2, activation='tanh'))
model1.compile(loss='mse', optimizer='Adam', metrics=['accuracy'])
model2 = Sequential()
model2.add(Dense(3, input_dim=3, activation='linear'))
model2.add(Dense(4, activation='tanh'))
model2.add(Dense(3, activation='tanh'))
model2.compile(loss='mse', optimizer='SGD', metrics=['accuracy'])
model3 = Sequential()
model3.add(Merge([model1, model2], mode = 'concat'))
model3.add(Dense(1, activation='sigmoid'))
model3.compile(loss='binary_crossentropy', optimizer='Adam', metrics=['accuracy'])
model3.input_shape
整体模型(model3)编译时没有任何错误,但是在拟合模型时,我必须两次传递相同的输入model3.fit([X,X],y)。我认为这是不必要的步骤,我不想为输入模型传递两次输入,而是希望有一个公共输入节点。我该怎么做?
python ×7
scikit-learn ×6
adaboost ×1
keras ×1
keras-layer ×1
matlab ×1
mlxtend ×1
numpy ×1
xgboost ×1