小编Sha*_*ery的帖子

尝试在R中运行lmer()时出错

所以这是我的问题.我在R中有一个数据集,我需要运行混合效果模型.这是代码:

data <- read.csv("D:/blahblah.csv")
analysis.data <- lmer(intdiff ~ stress_limit * word_position * follows + (1|speaker), data)
summary(analysis.data)
Run Code Online (Sandbox Code Playgroud)

当我尝试运行脚本时,它返回以下错误:

 Error in mer_finalize(ans) : Downdated X'X is not positive definite, 15.
Run Code Online (Sandbox Code Playgroud)

我已将错误跟踪到"跟随"参数,因为当我只使用stress_limit和word_position时,它运行正常.如果有帮助,"跟随"中的数据只有3个字符串:n或l,辅音,元音.我试过用_替换空格但没有成功.在这种情况下,lmer()函数的内部工作是否阻止使用"跟随"?任何帮助都会很棒!

有关更多信息:intdiff包含数值,stress_limit是字符串(Stressed或Unstressed),word位置也是字符串(Word Medial或Word Initial).

编辑:这是一个重现错误的数据样本:

structure(list(intdiff = c(11.45007951, 12.40144758, 13.47898367, 
6.279497762, 18.19461897, 16.15539707), word_position = structure(c(2L, 
2L, 2L, 1L, 1L, 1L), .Label = c("Word Initial", "Word Medial"
), class = "factor"), follows = structure(c(4L, 4L, 4L, 1L, 2L, 
4L), .Label = c("Consonant", "n or l", "Pause", "Vowel"), class = "factor"), 
stress_limit …
Run Code Online (Sandbox Code Playgroud)

r syntax-error lme4 lmer

4
推荐指数
1
解决办法
1万
查看次数

在scikit-learn中保存新数据的特征向量

为了创建机器学习算法,我制作了一个词典列表,并使用scikit的DictVectorizer为每个项目制作一个特征向量.然后,我使用部分数据从数据集创建SVM模型进行训练,然后在测试集上测试模型(您知道,这是典型的方法).一切都很好,现在我想将模型部署到野外,看看它是如何工作的新的,未标记的,看不见的数据.如何保存特征向量以使新数据具有相同的大小/特征并与SVM模型一起使用?例如,如果我想训练单词的存在:

[{
 'contains(the)': 'True',
 'contains(cat)': 'True',
 'contains(is)': 'True',
 'contains(hungry)': 'True'
 }...
]
Run Code Online (Sandbox Code Playgroud)

我训练的列表中有相同的句子,有数千种动物变种.当我对列表进行矢量化时,它会考虑所有提到的不同动物,并在每个动物的矢量中创建一个索引(''','是'和'饥饿'不会改变).现在,当我尝试在新句子上使用模型时,我想预测一个项目:

[{
 'contains(the)': 'True',
 'contains(emu)': 'True',
 'contains(is)': 'True',
 'contains(hungry)': 'True'
 }]
Run Code Online (Sandbox Code Playgroud)

没有原始训练集,当我使用DictVectorizer时,它会生成:(1,1,1,1).这是用于训练我的模型的原始向量之外的几千个索引,因此SVM模型将无法使用它.或者即使向量的长度是正确的,因为它是在大量句子上训练的,因此这些特征可能与原始值不对应.如何获得新数据以符合训练向量的维度?永远不会有比训练集更多的功能,但并不是所有功能都保证存在于新数据中.

有没有办法使用pickle来保存特征向量?或者我考虑过的一种方法是生成一个字典,其中包含值为'False'的所有可能特征.这会强制新数据进入正确的矢量大小,并仅计算新数据中存在的项目.

我觉得我可能没有充分描述这个问题,所以如果有些事情不清楚,我会尝试更好地解释它.先感谢您!


编辑:感谢larsman的回答,解决方案非常简单:

from sklearn.pipeline import Pipeline
from sklearn import svm
from sklearn.feature_extraction import DictVectorizer

vec = DictVectorizer(sparse=False)
svm_clf = svm.SVC(kernel='linear')
vec_clf = Pipeline([('vectorizer', vec), ('svm', svm_clf)])
vec_clf.fit(X_Train,Y_Train)
joblib.dump(vec_clf, 'vectorizer_and_SVM.pkl') 
Run Code Online (Sandbox Code Playgroud)

管道和支持向量机被训练成数据.现在,所有未来的模型都可以取消管道,并在SVM中内置了一个特征向量器.

python machine-learning scikit-learn

3
推荐指数
1
解决办法
2876
查看次数

标签 统计

lme4 ×1

lmer ×1

machine-learning ×1

python ×1

r ×1

scikit-learn ×1

syntax-error ×1