我有一大堆用植物学名称标记的植物图像.什么是用于训练此数据集以便对无标签照片进行分类的最佳算法?处理照片以使100%的像素包含植物(例如叶子或树皮的特写),因此算法不必过滤掉其他对象/空白空间/背景.
我已经尝试为所有照片生成SIFT功能并将这些(特征,标签)对提供给LibLinear SVM,但准确度却低了6%.
我也尝试将这些相同的数据提供给一些Weka分类器.准确度稍好一些(Logistic为25%,IBk为18%),但Weka不是为可扩展性而设计的(它将所有内容加载到内存中).由于SIFT要素数据集是几百万行,我只能用随机3%切片测试Weka,因此它可能不具代表性.
编辑:一些示例图像:

我正在使用libsvm,我必须实现多类的分类,而不是全部.
我该怎么做?2011版本
是否libsvm使用此功能?
我认为我的问题不是很清楚.如果libsvm没有自动使用one,那么我将为每个类使用一个svm,否则我如何在svmtrain函数中定义这个参数.我读过libsvm的自述文件.
我使用Python distutils2/packaging进入了这个概念 .
我确实谷歌它,但没有完全掌握这个想法,所以宁愿从更有经验的人那里得到更好的解释,以更好地理解这个概念.
"Trove分类器用于分类(搜索是一个很好的结果).这是一个准确的问题.PyPy,IronPython和Jython 不是编程语言,它们是Python编程语言的实现.Shedskin和Cython是类似python的编程语言(是的,子集和主要是超集)."
和,
"能够指定一个包被测试(已知可以使用)替代实现是有用的.例如,我会用pypy和Jython标记"mock",因为我经常测试这些实现并知道有用."
到目前为止,这是受支持的 分类器列表.
我正在研究数据的二进制分类,我想知道使用支持向量机优于决策树和自适应Boosting算法的优缺点.
因此,我正处于下一步的交叉路上,我开始学习并在复杂的数据集上应用一些机器学习算法,现在我已经完成了这项工作.我的计划从一开始就是结合两种可能的分类器,试图建立一个多分类系统.
但这里是我被困的地方.我选择聚类算法(模糊C均值)(在学习一些样本K均值之后)和朴素贝叶斯作为MCS(多分类系统)的两个候选者.
我可以独立使用它们来对数据进行分类,但我正在努力以有意义的方式将两者结合起来.
例如,模糊聚类几乎捕获所有"蓝精灵"攻击,除了通常一个,我不知道为什么它没有抓住这个奇怪的球,但我所知道的是它没有.其中一个集群将由smurf攻击占主导地位,通常我会在其他集群中找到一个蓝精灵.如果我在所有不同的攻击类型(Smurf,普通,海王星......等)上训练贝叶斯分类器并将其应用于其余的群集以试图找到最后一个,那么这就是我遇到问题场景的地方剩下的蓝精灵会有很高的误报率.
我不确定如何继续,我不想将其他攻击带出训练集,但我只想训练贝叶斯分类器来发现"蓝精灵"攻击.目前,它经过培训可以尝试发现所有内容,在这个过程中,我认为(不确定)精确度会下降.
所以这是我在使用朴素贝叶斯分类器时的问题,你如何才能让它只查找smurf并将其他所有内容归类为"其他".
rows = 1000;
columns = 6;
indX = randperm( size(fulldata,1) );
indX = indX(1:rows)';
data = fulldata(indX, indY)
indX1 = randperm( size(fulldata,1) );
indX1 = indX1(1:rows)';
%% apply normalization method to every cell
%data = zscore(data);
training_data = data;
target_class = labels(indX,:)
class = classify(test_data,training_data, target_class, 'diaglinear')
confusionmat(target_class,class)
Run Code Online (Sandbox Code Playgroud)
我在想的是手动将target_class所有正常的流量和不是蓝精灵的攻击转换为其他流量.然后我已经知道FCM正确地对除了一个smurf攻击之外的所有类别进行分类,我只需要在剩余的集群上使用朴素的贝叶斯分类器.
例如:
群集1 = 500个smurf攻击(重复此步骤可能会将1000个样本中的"大多数"smurf攻击转移到不同的群集中,因此我必须检查或迭代群集中的最大大小,一旦找到我可以将其从朴素的贝叶斯分类器阶段)
然后我在每个剩余的集群上测试分类器(不知道如何在matlab中进行循环等)所以此刻我必须在处理过程中手动选择它们.
clusters = 4;
CM = colormap(jet(clusters));
options(1) = 12.0;
options(2) = …Run Code Online (Sandbox Code Playgroud) matlab classification cluster-analysis bayesian fuzzy-c-means
我在Weka中训练了一个分类器,我可以在测试数据上使用它.此外,我可以选择在日志窗口中显示此测试数据的分类器预测.
但是,对于我当前的项目,能够以CSV格式获取此数据将非常方便.这可能在Weka?是否只有在使用命令行时才能实现(我最终会走向)?
我总是可以将整个缓冲区结果保存到文本文件中,但在这种情况下,我必须解析文件并删除所有"噪音"(这不是真正的噪音,但你明白了).
那么,总而言之,有没有办法将Weka对测试集的预测输出到CSV文件?
编辑:如下面的答案所示,有一个选项可以做到这一点.但是,它只能在Weka 3.7及以上版本中找到!
我正在尝试使用Mahout对用户进行聚类和分类.目前我处于规划阶段,我的想法与想法完全混合,因为我对这个领域相对较新,所以我坚持数据格式化.
假设我们有两个数据表(足够大).在第一个表中有用户及其操作.每个用户至少有一个动作,他们也可以有太多的动作.表中有大约10000个不同的user_actions和数百万条记录.
user - user_action
u1 - a
u2 - b
u3 - a
u1 - c
u2 - c
u2 - c
u1 - b
u4 - f
u4 - e
u1 - e
u1 - d
u5 - d
Run Code Online (Sandbox Code Playgroud)
在另一个表中,有行动类别.每个动作可能没有或多个类别.共有60个类别.
user_action - category
a - cat1
b - cat2
c - cat1
d - NULL
e - cat1, cat3
f - cat4
Run Code Online (Sandbox Code Playgroud)
我将尝试使用Mahout构建用户分类模型,但我不知道应该做什么.我应该创建什么类型的用户向量?或者我真的需要用户向量吗?
我想我需要创造类似的东西;
u1 (a, c, b, e, d)
u2 (b, c, c)
u3 …Run Code Online (Sandbox Code Playgroud) 我想知道在scikit-learn软件包的最新版本中是否有平衡随机森林(BRF)的实现.BRF用于不平衡数据的情况.它可以作为普通RF工作,但是对于每次自举迭代,它通过欠采样来平衡普遍性类.例如,给定两个类N0 = 100,N1 = 30个实例,在每个随机抽样中,它从第一个类中抽取(替换)30个实例,从第二个类抽取相同数量的实例,即它在一个树上训练一个树.平衡数据集.有关更多信息,请参阅本文.
RandomForestClassifier()确实有'class_weight ='参数,可能设置为'balanced',但我不确定它是否与bootrapped训练样本的下采样有关.
我正在做多标签分类,我尝试为每个文档预测正确的标签,这是我的代码:
mlb = MultiLabelBinarizer()
X = dataframe['body'].values
y = mlb.fit_transform(dataframe['tag'].values)
classifier = Pipeline([
('vectorizer', CountVectorizer(lowercase=True,
stop_words='english',
max_df = 0.8,
min_df = 10)),
('tfidf', TfidfTransformer()),
('clf', OneVsRestClassifier(LinearSVC()))])
predicted = cross_val_predict(classifier, X, y)
Run Code Online (Sandbox Code Playgroud)
运行我的代码时,我收到多个警告:
UserWarning: Label not :NUMBER: is present in all training examples.
Run Code Online (Sandbox Code Playgroud)
当我打印出预测标签和真实标签时,cca一半的所有文件都有标签为空的预测.
为什么会发生这种情况,是否与在训练运行时打印出的警告有关?我怎样才能避免那些空洞的预测呢?
LinearSVC().
我试过了RandomForestClassifier(),它也给出了空洞的预测.奇怪的是,当我cross_val_predict(classifier, X, y, method='predict_proba')用于预测每个标签的概率而不是二元决策0/1时,每个预测集总是至少有一个标签,给定文档的概率> 0.所以我不知道为什么这个标签没有选择二元决策?或者是以不同于概率的方式评估二元决策?
EDIT02: 我找到了一个老职位,其中OP处理类似的问题.这是同样的情况吗?
python classification scikit-learn text-classification multilabel-classification
我正在学习神经网络,我在Keras中为UCI机器学习库中的虹膜数据集分类构建了一个简单的网络.我使用了一个带有8个隐藏节点的隐藏层网络.使用Adam优化器的学习率为0.0005,并且运行200个时期.Softmax用于输出,损失为catogorical-crossentropy.我得到以下学习曲线.
正如您所看到的,准确性的学习曲线有很多平坦的区域,我不明白为什么.错误似乎在不断减少,但准确性似乎并没有以同样的方式增加.精确度学习曲线中的平坦区域意味着什么?为什么即使错误似乎在减少,这些区域的准确度也不会增加?
这在培训中是正常的还是我更有可能在这里做错了什么?
dataframe = pd.read_csv("iris.csv", header=None)
dataset = dataframe.values
X = dataset[:,0:4].astype(float)
y = dataset[:,4]
scalar = StandardScaler()
X = scalar.fit_transform(X)
label_encoder = LabelEncoder()
y = label_encoder.fit_transform(y)
encoder = OneHotEncoder()
y = encoder.fit_transform(y.reshape(-1,1)).toarray()
# create model
model = Sequential()
model.add(Dense(8, input_dim=4, activation='relu'))
model.add(Dense(3, activation='softmax'))
# Compile model
adam = optimizers.Adam(lr=0.0005, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='categorical_crossentropy',
optimizer=adam,
metrics=['accuracy'])
# Fit the model
log = model.fit(X, y, epochs=200, batch_size=5, validation_split=0.2)
fig = plt.figure()
fig.suptitle("Adam, lr=0.0006, one hidden layer")
ax = fig.add_subplot(1,2,1) …Run Code Online (Sandbox Code Playgroud)