我创建了几个ctree模型(大约40到80),我想要经常评估.
一个问题是模型对象非常大(40个模型需要超过2.8G的内存),在我看来,他们存储了训练数据,可能是modelname @ data和modelname @ response,而不仅仅是相关的信息预测新数据.
大多数其他R学习包具有可配置选项,是否将数据包含在模型对象中,但我在文档中找不到任何提示.我还尝试通过分配空的ModelEnv对象
modelname@data <- new("ModelEnv")
Run Code Online (Sandbox Code Playgroud)
但是对各个RData文件的大小没有影响.
任何人都知道ctree是否真的存储了训练数据以及如何从ctree模型中删除与新预测无关的所有数据,以便我可以将其中的许多数据放入内存中?
非常感谢,
斯特凡
感谢您的反馈,这已经非常有帮助.
我使用dput并str深入研究了对象,发现模型中没有包含任何训练数据,但是有一个responses插槽,似乎有训练标签和rownames.无论如何,我注意到每个节点都有一个每个训练样本的权重向量.经过一段时间检查代码后,我最后搜索了一下,在partyNEWS日志中找到了以下注释:
CHANGES IN party VERSION 0.9-13 (2007-07-23)
o update `mvt.f'
o improve the memory footprint of RandomForest objects
substancially (by removing the weights slots from each node).
Run Code Online (Sandbox Code Playgroud)
事实证明,派对包中有一个C函数可以删除这些权限,R_remove_weights并使用以下定义调用:
SEXP R_remove_weights(SEXP subtree, SEXP removestats) {
C_remove_weights(subtree, LOGICAL(removestats)[0]);
return(R_NilValue);
}
Run Code Online (Sandbox Code Playgroud)
它也工作正常:
# cc is my model object
sum(unlist(lapply(slotNames(cc), function (x) object.size(slot(cc, x)))))
# returns: [1] 2521256
save(cc, …Run Code Online (Sandbox Code Playgroud) 使用现有的文本分类(监督)技术,为什么我们不将文本中的命名实体(NE)视为培训和测试中的一个特征?您认为使用NE作为功能可以提高精度吗?
text classification machine-learning named-entity-recognition
嘿,这是我的问题,
给定一组文档,我需要将每个文档分配给预定义的类别.
我将使用n-gram方法来表示每个文档的文本内容,然后在我拥有的训练数据上训练SVM分类器.
如果我想念一些东西,请纠正我.
现在的问题是类别应该是动态的.意思是,我的分类器应该处理新类别的新训练数据.
因此,例如,如果我训练分类器将给定文档分类为类别A,类别B或类别C,然后我获得了类别D的新训练数据.我应该能够通过提供它来增量训练我的分类器. "D类"的新培训数据.
总而言之,我不想将旧的训练数据(包括3个类别)和新的训练数据(使用新的/看不见的类别)组合在一起并再次训练我的分类器.我想在飞行中训练我的分类器
这可以用SVM实现吗?如果没有,你能推荐我几种分类算法吗?或任何可以帮助我的书/纸.
提前致谢.
algorithm classification machine-learning document-classification
我的数据库中有大约1600篇文章,每篇文章都已经预先标记了以下类别之一:
Technology
Science
Business
World
Health
Entertainment
Sports
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用sci-kit学习构建一个分类新文章的分类器.(我想我会将训练数据分成两半,用于训练和测试?)
我希望使用tf-idf,因为我没有停止词的列表(我可以使用NLTK仅提取形容词和名词,但我宁愿给scikit - 学习完整的文章).
我已经阅读了关于scikit-learn的所有文档,但是他们的例子涉及单词出现和N-gram(很好),但他们从未指定如何将一段数据绑定到标签.
我已经尝试过查看他们的示例代码了,但是它太难以理解了.
有人可以帮我解决这个问题,还是指出我正确的方向?
谢谢.
我正在使用分类树sklearn,当我使用相同的数据进行两次模型训练时,并使用相同的测试数据进行预测,我得到的结果不同.我尝试在较小的虹膜数据集上进行再现,并且它按预期工作.这是一些代码
from sklearn import tree
from sklearn.datasets import iris
clf = tree.DecisionTreeClassifier()
clf.fit(iris.data, iris.target)
r1 = clf.predict_proba(iris.data)
clf.fit(iris.data, iris.target)
r2 = clf.predict_proba(iris.data)
Run Code Online (Sandbox Code Playgroud)
r1并且r2对于这个小例子是相同的,但是当我运行我自己的更大的数据集时,我会得到不同的结果.是否会出现这种情况?
编辑在查看一些文档后,我看到它DecisionTreeClassifier有一个random_state控制起点的输入.通过将此值设置为常量,我摆脱了以前遇到的问题.但是现在我担心我的模型不尽如人意.这样做的推荐方法是什么?随便尝试一下?或者预计所有结果大致相同?
我有一个类似下面的矢量,并希望确定列表中的哪些元素是人名,哪些不是.我发现了humaniformat包,它格式化了名称,但遗憾的是并不确定字符串是否实际上是一个名称.我还发现了一些用于实体提取的包,但它们似乎需要实际的文本来进行词性标注,而不是单个名称.
例
pkd.names.quotes <- c("Mr. Rick Deckard", # Name
"Do Androids Dream of Electric Sheep", # Not a name
"Roy Batty", # Name
"How much is an electric ostrich?", # Not a name
"My schedule for today lists a six-hour self-accusatory depression.", # Not a name
"Upon him the contempt of three planets descended.", # Not a name
"J.F. Sebastian", # Name
"Harry Bryant", # Name
"goat class", # Not a name
"Holden, Dave", # Name
"Leon Kowalski", # Name …Run Code Online (Sandbox Code Playgroud) 我正在研究多标签分类器.我有很多输出标签[1,0,0,1 ...],其中1表示输入属于该标签,0表示否则.
在我的情况下,我使用的损失函数基于MSE.我想以一种方式改变损失函数,当输出标签为-1时,它将改变为该标签的预测概率.
检查附加的图像以最好地理解我的意思:场景是 - 当输出标签为-1时我希望MSE等于零:
在这种情况下,我希望它改为:
在这种情况下,第二个标签的MSE(中间输出)将为零(这是我不希望分类器了解此标签的特殊情况).
感觉这是一个必要的方法,我真的不相信我是第一个考虑它的人,所以首先我想知道是否有这样的训练神经网络的名称,其次我想知道如何我可以做吗.
我知道我需要更改损失函数中的一些东西,但我真的是Theano的新手,并且不确定如何查找特定值以及如何更改张量的内容.
我正在训练一个用于多标签分类的神经网络,具有大量的类(1000).这意味着每个输入都可以激活多个输出.平均而言,每个输出帧有两个活动类.在具有交叉熵损失的训练中,神经网络倾向于仅输出零,因为它具有该输出的最小损失,因为99.8%的我的标签是零.关于我如何推动网络给予积极课程更多权重的任何建议?
我在R中创建了一个决策树模型.目标变量是Salary,我们试图根据其他输入变量来预测一个人的工资是高于还是低于50k
df<-salary.data
train = sample(1:nrow(df), nrow(df)/2)
train = sample(1:nrow(df), size=0.2*nrow(df))
test = - train
training_data = df[train, ]
testing_data = df[test, ]
fit <- rpart(training_data$INCOME ~ ., method="class", data=training_data)##generate tree
testing_data$predictionsOutput = predict(fit, newdata=testing_data, type="class")##make prediction
Run Code Online (Sandbox Code Playgroud)
之后,我尝试通过执行以下操作创建增益图表
# Gain Chart
pred <- prediction(testing_data$predictionsOutput, testing_data$INCOME)
gain <- performance(pred,"tpr","fpr")
plot(gain, col="orange", lwd=2)
Run Code Online (Sandbox Code Playgroud)
通过查看引用,我无法理解如何使用ROCR包通过使用"预测"功能来构建图表.这仅适用于二进制目标变量吗?我收到的错误是"预测格式无效"
任何帮助都将非常感谢帮助我为上述模型构建增益图表.谢谢!!
AGE EMPLOYER DEGREE MSTATUS JOBTYPE SEX C.GAIN C.LOSS HOURS
1 39 State-gov Bachelors Never-married Adm-clerical Male 2174 0 40
2 50 Self-emp-not-inc Bachelors Married-civ-spouse Exec-managerial Male 0 0 …Run Code Online (Sandbox Code Playgroud) classification ×10
python ×3
r ×3
keras ×2
scikit-learn ×2
text ×2
algorithm ×1
nlp ×1
rstudio ×1
theano ×1