我正在使用scikit对短语进行文本分类.一些例子是:
"Yes" - label.yes
"Yeah" - label.yes
...
"I don't know" - label.i_don't_know
"I am not sure" - label.i_don't_know
"I have no idea" - label.i_don't_know
Run Code Online (Sandbox Code Playgroud)
使用TfidfVectorizer和MultinomialNB分类器,一切都运行良好.
添加新文本/标签对时出现问题:
"I" - label.i
Run Code Online (Sandbox Code Playgroud)
预测"I"的类仍会返回label.i_don't_know,即使文本正好在这样的训练数据中,这可能是因为unigram"I"更常出现在label.i_don't_know中.在label.i中.
是否有一个分类器可以在此任务上提供相当或更好的性能,并保证正确返回训练数据元素的预测?
此代码进一步说明了该问题:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
#instantiate classifier and vectorizer
clf=MultinomialNB(alpha=.01)
vectorizer =TfidfVectorizer(min_df=1,ngram_range=(1,2))
#Apply vectorizer to training data
traindata=['yes','yeah','i do not know','i am not sure','i have no idea','i'];
X_train=vectorizer.fit_transform(traindata)
#Label Ids
y_train=[0,0,1,1,1,2];
#Train classifier
clf.fit(X_train, y_train)
print clf.predict(vectorizer.transform(['i']))
Run Code Online (Sandbox Code Playgroud)
代码输出标签1,但正确的分类是标签2.
我正在尝试使用21列和大量行对数据集进行分类.我已经达到了可以将数据作为csv导入并打印出单独列的程度.我还有两件事要做.首先,我希望能够打印出特定的数据点.例如,位于第2行第4列的数据点.第二个任务是根据第4列和第5列对数据行进行分类.这些列是纬度和经度.而我正在尝试获取世界特定部分的行.所以我的想法就是这样
if 60 > row[4] > 45 and 165 > row[1] > 150:
Run Code Online (Sandbox Code Playgroud)
即(如数学运算(9> x> 5))
我不确定上述程序的正确方法是什么.
我已将代码粘贴到底部.我是python编程的新手,所以随时指出错误.
import csv
path = r'C:\Documents and Settings\eag29278\My Documents\python test code\test_satdata.csv'
with open(path, 'rb') as f:
reader = csv.reader(f, delimiter=',')
for row in reader:
print row [0]
#this prints out the first column
var1 = []
for row in f:
if 60 > row[4] > 45 and 165 > row[1] > 150:
var1.append(row)
print var1
Run Code Online (Sandbox Code Playgroud)
更新1
好吧所以我更新了代码,但是当我运行模块时,我得到了这个输出..
2010 2010 2010 2010 2010 2010 …
我有几百条推文可供我使用,我希望通过获取真实姓名并查看至少2条推文,将每个Twitter用户分类为男性和女性.我已经编程了从他们的个人资料中获取每个人的真实姓名,我现在正在寻找对他们的推文文本进行分类,以试图对用户是M还是F做出更强烈的肯定.我在网上搜索和搜索了文本示例分类但不太确定从哪里开始.我还在这个链接Twitter文本与性别下载中找到了一些非常有用的数据. 任何有关如何将推文文本归类为男性或女性的建议都将非常感激!我有点像砖墙.
我有(256*1)特征向量来自灰色图像(16*16).当我计算该向量的样本协方差并且计算协方差矩阵行列式答案是inf时,向量的数量是550
有限矩阵的有限范围(0:255)值是无限的可能决定因素还是我错误的某些地方?
实际上我想要用贝叶斯估计进行分类,我的分布是高斯分布的,当我计算行列式是inf时,最终答案(似然)为零.
我的代码的一部分:
Mean = mean(dataSet,2);
MeanMatrix = Mean*ones(1,NoC);
Xc = double(dataSet)-MeanMatrix; % transform data to the origine
Sigma = (1/NoC) *Xc*Xc'; % calculate sample covariance matrix
Parameters(i).M = Mean';
Parameters(i).C = Sigma;
likelihoods(i) = (1/(2*pi*sqrt(det(params(i).C)))) * (exp(-0.5 * (double(X)-params(i).M)' * inv(params(i).C) * (double(X)-params(i).M)));
Run Code Online (Sandbox Code Playgroud)
变量我展示我的课程; 变量X显示我的特征向量;
这有点难以解释。我有一个整数列表。因此,例如[1, 2, 4, 5, 8, 7, 6, 4, 1]-与元素编号相对应时,-类似于凸图。如何以某种方式从列表中提取此“形状”特征?不必特别精确-只需一般形状,凸形(带有一个驼峰),凹形(带有两个驼峰),直线等即可。
我可以对每种可能的形状使用条件:例如,如果斜率在确定的指数范围内为正,在其后为负,则为斜率,其偏斜度取决于index/list_size。
有一些更聪明的通用方法吗?我想这可能是分类问题-但是没有ML是否可能?
干杯。
python statistics computer-science classification differentiation
在我的代码中,我从第一个分类器获得Person识别,对于我创建的第二个分类器,我添加了一些要被识别或注释为Organization的单词,但它没有注释Person.
我需要从他们两个中获益,我该怎么做?
我正在使用Netbeans,这是代码:
String serializedClassifier = "classifiers/english.all.3class.distsim.crf.ser.gz";
String serializedClassifier2 = "/Users/ha/stanford-ner-2014-10-26/classifiers/dept-model.ser.gz";
if (args.length > 0) {
serializedClassifier = args[0];
}
AbstractSequenceClassifier<CoreLabel> classifier = CRFClassifier.getClassifier(serializedClassifier);
AbstractSequenceClassifier<CoreLabel> classifier2 = CRFClassifier.getClassifier(serializedClassifier2);
String fileContents = IOUtils.slurpFile("/Users/ha/NetBeansProjects/NERtry/src/nertry/input.txt");
List<List<CoreLabel>> out = classifier.classify(fileContents);
List<List<CoreLabel>> out2 = classifier2.classify(fileContents);
for (List<CoreLabel> sentence : out) {
System.out.print("\nenglish.all.3class.distsim.crf.ser.gz: ");
for (CoreLabel word : sentence) {
System.out.print(word.word() + '/' + word.get(CoreAnnotations.AnswerAnnotation.class) + ' ');
}
for (List<CoreLabel> sentence2 : out2) {
System.out.print("\ndept-model.ser.gz");
for (CoreLabel word2 : …Run Code Online (Sandbox Code Playgroud) 我正致力于判别分析,并希望使用MATLAB对一些数据进行分类.在MATLAB中给出的Fisher's Iris Data示例中(详情请访问www.mathworks.com/products/demos/statistics/classdemo.html),他们只考虑前2个变量(Sepal Length&Width).我想继续进行具有更多功能的分类,如花瓣长度和花瓣宽度.
此外,MATLAB函数gscatter似乎只需要2个变量.
gscatter(meas(:,1), meas(:,2), species,'rgb','osd');
我想包括meas(:,3)并继续.请帮助我.谢谢
我在R中训练了一个gbm模型.由于我试图预测一个非常罕见的情况,我得到了很多误报.我想将正("好")案例的阈值从默认值更改为0.7.到目前为止,这是我的代码.
modFit.glm.ml <- train(as.factor(ml.training$one_lease)~., data=ml.training, method = "glm")
confusionMatrix(ml.testing$one_lease, predict(modFit.glm.ml, ml.testing), positive = "Good")
Run Code Online (Sandbox Code Playgroud)
此代码有效但它使用默认截止值.有人提到这可能与预测功能,但我不知道如何做到这一点.
我正在研究一个文本多类分类项目,我需要构建文档/术语矩阵,并用R语言进行训练和测试.
我已经有了不适合R中基矩阵的有限维度的数据集,并且需要构建大的稀疏矩阵才能对例如100k的推文进行分类.我正在使用quanteda软件包,因为它现在比包tm更有用和可靠,其中使用字典创建DocumentTermMatrix,使得过程难以置信地使用小数据集.目前,正如我所说的,我使用quanteda来构建等效的Document Term Matrix容器,稍后我将其转换为data.frame来执行培训.
我想知道是否有办法建立这么大的矩阵.我一直在阅读有关的bigmemory包,允许这种容器的,但我不知道它会与插入符号为后来的分类.总的来说,我想了解这个问题并构建一个解决方法,以便能够处理更大的数据集,因为RAM不是(大)问题(32GB),但我正试图找到一种方法来做到这一点,我觉得完全失去了关于它.
我想这样做使用sklearn与神经网络最终隐藏激活层输出一些测试MLPClassifier后fit廷的数据。
例如,如果我创建一个分类器,则假设数据X_train带有标签y_train和两个隐藏的大小层(300,100)
clf = MLPClassifier(hidden_layer_sizes=(300,100))
clf.fit(X_train,y_train)
Run Code Online (Sandbox Code Playgroud)
我希望能够以某种方式调用一个函数来检索最终隐藏的激活层矢量的长度,100以用于其他测试。
假设测试集X_test, y_test,正常预测将是:
preds = clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
但是,我想做些类似的事情:
activation_layers_for_all_X_test = clf.get_final_activation_output(X_test)
Run Code Online (Sandbox Code Playgroud)
诸如此类的功能已经get_weights存在,但这只会对我有所帮助。除了自己进行转换之外,还有另一种方法可以检索最终隐藏层激活的最终隐藏层输出吗?
以该图为例:

我想要的输出是Out Layer,即最终隐藏层的最终激活输出。
python classification machine-learning scikit-learn data-science
classification ×10
python ×4
matlab ×2
r ×2
scikit-learn ×2
csv ×1
data-science ×1
matrix ×1
netbeans ×1
quanteda ×1
r-caret ×1
stanford-nlp ×1
statistics ×1
text-mining ×1
twitter ×1