标签: classification

大规模图像分类器

我有一大堆用植物学名称标记的植物图像.什么是用于训练此数据集以便对无标签照片进行分类的最佳算法?处理照片以使100%的像素包含植物(例如叶子或树皮的特写),因此算法不必过滤掉其他对象/空白空间/背景.

我已经尝试为所有照片生成SIFT功能并将这些(特征,标签)对提供给LibLinear SVM,但准确度却低了6%.

我也尝试将这些相同的数据提供给一些Weka分类器.准确度稍好一些(Logistic为25%,IBk为18%),但Weka不是为可扩展性而设计的(它将所有内容加载到内存中).由于SIFT要素数据集是几百万行,我只能用随机3%切片测试Weka,因此它可能不具代表性.

编辑:一些示例图像:

Pachira aquatica Fagus grandifolia

classification machine-learning image-processing

9
推荐指数
1
解决办法
2955
查看次数

libsvm中的多类分类

我正在使用libsvm,我必须实现多类的分类,而不是全部.

我该怎么做?2011版本
是否libsvm使用此功能?


我认为我的问题不是很清楚.如果libsvm没有自动使用one,那么我将为每个类使用一个svm,否则我如何在svmtrain函数中定义这个参数.我读过libsvm的自述文件.

matlab classification machine-learning svm libsvm

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

Trove分类器定义

我使用Python distutils2/packaging进入了这个概念 .

我确实谷歌它,但没有完全掌握这个想法,所以宁愿从更有经验的人那里得到更好的解释,以更好地理解这个概念.

"Trove分类器用于分类(搜索是一个很好的结果).这是一个准确的问题.PyPy,IronPython和Jython 不是编程语言,它们是Python编程语言的实现.Shedskin和Cython是类似python的编程语言(是的,子集和主要是超集)."

和,

"能够指定一个包被测试(已知可以使用)替代实现是有用的.例如,我会用pypy和Jython标记"mock",因为我经常测试这些实现并知道有用."

到目前为止,这是受支持的 分类器列表.

python classification

9
推荐指数
1
解决办法
2498
查看次数

SVM优于十亿树和AdaBoost算法的优点

我正在研究数据的二进制分类,我想知道使用支持向量机优于决策树和自适应Boosting算法的优缺点.

classification machine-learning svm decision-tree adaboost

9
推荐指数
1
解决办法
7985
查看次数

聚类和贝叶斯分类器Matlab

因此,我正处于下一步的交叉路上,我开始学习并在复杂的数据集上应用一些机器学习算法,现在我已经完成了这项工作.我的计划从一开始就是结合两种可能的分类器,试图建立一个多分类系统.

但这里是我被困的地方.我选择聚类算法(模糊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

9
推荐指数
1
解决办法
2466
查看次数

Weka对CSV的预测

我在Weka中训练了一个分类器,我可以在测试数据上使用它.此外,我可以选择在日志窗口中显示此测试数据的分类器预测.

但是,对于我当前的项目,能够以CSV格式获取此数据将非常方便.这可能在Weka?是否只有在使用命令行时才能实现(我最终会走向)?

我总是可以将整个缓冲区结果保存到文本文件中,但在这种情况下,我必须解析文件并删除所有"噪音"(这不是真正的噪音,但你明白了).

那么,总而言之,有没有办法将Weka对测试集的预测输出到CSV文件?

编辑:如下面的答案所示,有一个选项可以做到这一点.但是,它只能在Weka 3.7及以上版本中找到!

csv classification weka output

9
推荐指数
2
解决办法
2万
查看次数

用户从分类用户行为中分析Mahout

我正在尝试使用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)

classification cluster-analysis mahout

9
推荐指数
1
解决办法
146
查看次数

scikit-learn(python)中的平衡随机森林

我想知道在scikit-learn软件包的最新版本中是否有平衡随机森林(BRF)的实现.BRF用于不平衡数据的情况.它可以作为普通RF工作,但是对于每次自举迭代,它通过欠采样来平衡普遍性类.例如,给定两个类N0 = 100,N1 = 30个实例,在每个随机抽样中,它从第一个类中抽取(替换)30个实例,从第二个类抽取相同数量的实例,即它在一个树上训练一个树.平衡数据集.有关更多信息,请参阅本文.

RandomForestClassifier()确实有'class_weight ='参数,可能设置为'balanced',但我不确定它是否与bootrapped训练样本的下采样有关.

classification random-forest scikit-learn

9
推荐指数
2
解决办法
3361
查看次数

UserWarning:标签不是:NUMBER:出现在所有培训示例中

我正在做多标签分类,我尝试为每个文档预测正确的标签,这是我的代码:

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一半的所有文件都有标签为空的预测.

为什么会发生这种情况,是否与在训练运行时打印出的警告有关?我怎样才能避免那些空洞的预测呢?


EDIT01: 使用其他估算器时也会发生这种情况LinearSVC().

我试过了RandomForestClassifier(),它也给出了空洞的预测.奇怪的是,当我cross_val_predict(classifier, X, y, method='predict_proba')用于预测每个标签的概率而不是二元决策0/1时,每个预测集总是至少有一个标签,给定文档的概率> 0.所以我不知道为什么这个标签没有选择二元决策?或者是以不同于概率的方式评估二元决策?

EDIT02: 我找到了一个老职位,其中OP处理类似的问题.这是同样的情况吗?

python classification scikit-learn text-classification multilabel-classification

9
推荐指数
1
解决办法
2425
查看次数

损失和准确性 - 这些合理的学习曲线吗?

我正在学习神经网络,我在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)

classification machine-learning loss neural-network keras

9
推荐指数
1
解决办法
2916
查看次数