标签: classification

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
查看次数

聚类和贝叶斯分类器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
查看次数

是否有任何分类算法针对具有一对多(1:n)关系的数据?

数据挖掘领域是否有任何关于对具有一对多关系的数据进行分类的研究?

例如,像这样的问题,我说我试图根据他们的班级和个人信息来预测哪些学生将退学.显然,学生个人信息与他们在课堂上取得的成绩之间存在一对多的关系.

明显的方法包括:

  1. 聚合 - 可以以某种方式将多个记录聚合在一起,将问题简化为基本分类问题.在学生分类的情况下,他们的成绩的平均值可以与他们的个人数据相结合.虽然这种解决方案很简单,但通常会丢失关键信息.例如,如果大多数采用有机化学并且低于C-结束的学生即使他们的平均水平高于B +等级也会辍学.

  2. 投票 - 创建多个分类器(通常是弱分类器)并让他们投票以确定相关数据的整体类别.这就像是建立了两个分类器,一个用于学生的课程数据,一个用于他们的个人数据.每个课程记录将被传递到课程分类器,并根据成绩和课程名称,分类器将预测学生是否会单独使用该课程记录退学.将使用个人数据分类器对个人数据记录进行分类.然后,所有课堂记录预测以及个人信息记录预测将被一起投票.这种投票可以通过多种不同的方式进行,但很可能会考虑分类器的准确程度以及分类器的确定性.显然,该方案允许比聚合更复杂的分类模式,但是涉及许多额外的复杂性.此外,如果投票表现不佳,准确性很容易受到影响.

所以我正在寻找具有一对多关系的数据分类的其他可能解决方案.

algorithm classification machine-learning database-relations data-mining

8
推荐指数
1
解决办法
1114
查看次数

使用决策树

我知道了;博士;

我会试着解释一下我的问题而不用烦人的代码来打扰你.我正在完成一项学校作业.我们有蓝精灵的照片,我们必须通过前景背景分析找到它们.我在java中有一个决策树,其中所有数据(HSV直方图)都是一个节点.然后尝试找到最佳属性(来自直方图数据)以分割树.然后执行拆分并创建左侧和右侧子树,并在两个节点树上拆分数据.所有数据仍保留在主树中,以便能够计算基尼指数.

因此,经过26分钟的分析蓝精灵,我的电脑有一个巨大的树与分裂和其他数据.现在我的问题是,任何人都可以给我一个关于如何分析新图片并确定哪些像素可能是"蓝图像素"的全局概念.我知道我必须使用新smurf的HSV直方图生成一个新的数据点数组,然后我需要使用生成的树来确定哪些像素属于smurf.

任何人都可以给我一个如何做到这一点的指针?

一些额外的信息.
每个Decision Tree对象都有一个Split对象,该对象具有要拆分的最佳属性,要拆分的值和gini索引.

如果我需要提供任何其他信息,我想听听.

classification machine-learning image-processing image-recognition decision-tree

8
推荐指数
1
解决办法
2037
查看次数

分类得分:SVM

我使用libsvm进行多类分类.如何将分类分数与分类的置信度与给定样本的输出进行比较,如下所示:

Class 1: score1

Class 2: score2

Class 3: score3

Class 4: score4
Run Code Online (Sandbox Code Playgroud)

statistics classification svm libsvm

8
推荐指数
1
解决办法
3714
查看次数

SkLearn Multinomial NB:最具信息性的功能

由于我的分类器在测试数据上的准确率大约为99%,我有点怀疑并希望深入了解我的NB分类器中最具信息性的功能,以了解它正在学习哪种功能.以下主题非常有用:如何获取scikit-learn分类器的大部分信息功能?

至于我的功能输入,我还在玩,目前我正在测试一个简单的unigram模型,使用CountVectorizer:

 vectorizer = CountVectorizer(ngram_range=(1, 1), min_df=2, stop_words='english')
Run Code Online (Sandbox Code Playgroud)

在上述主题中,我发现了以下功能:

def show_most_informative_features(vectorizer, clf, n=20):
feature_names = vectorizer.get_feature_names()
coefs_with_fns = sorted(zip(clf.coef_[0], feature_names))
top = zip(coefs_with_fns[:n], coefs_with_fns[:-(n + 1):-1])
for (coef_1, fn_1), (coef_2, fn_2) in top:
    print "\t%.4f\t%-15s\t\t%.4f\t%-15s" % (coef_1, fn_1, coef_2, fn_2)
Run Code Online (Sandbox Code Playgroud)

这给出了以下结果:

    -16.2420        114th                   -4.0020 said           
    -16.2420        115                     -4.6937 obama          
    -16.2420        136                     -4.8614 house          
    -16.2420        14th                    -5.0194 president      
    -16.2420        15th                    -5.1236 state          
    -16.2420        1600                    -5.1370 senate         
    -16.2420        16th                    -5.3868 new            
    -16.2420        1920                    -5.4004 republicans    
    -16.2420        1961                    -5.4262 republican     
    -16.2420        1981 …
Run Code Online (Sandbox Code Playgroud)

python classification machine-learning scikit-learn text-classification

8
推荐指数
1
解决办法
5299
查看次数

Scikit学习错误消息'精确度和F分数定义不明确,并在标签中设置为0.0'

我正在研究二元分类模型,分类器是天真的贝叶斯.我有一个几乎平衡的数据集,但是当我预测时,我收到以下错误消息:

UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)
Run Code Online (Sandbox Code Playgroud)

我正在使用带有CV k-fold 10的gridsearch.测试集和预测包含两个类,所以我不理解该消息.我正在为其他6个模型研究相同的数据集,训练/测试分裂,cv和随机种子,这些工作非常完美.数据被外部摄取到数据帧中,随机化并且种子是固定的.然后,朴素贝叶斯分类模型将该文件放在此代码片段之前的开头.

X_train, X_test, y_train, y_test, len_train, len_test = \
     train_test_split(data['X'], data['y'], data['len'], test_size=0.4)
pipeline = Pipeline([
    ('classifier', MultinomialNB()) 
])

cv=StratifiedKFold(len_train, n_folds=10)

len_train = len_train.reshape(-1,1)
len_test = len_test.reshape(-1,1)

params = [
  {'classifier__alpha': [0, 0.0001, 0.001, 0.01]}

]

grid = GridSearchCV(
    pipeline,
    param_grid=params,
    refit=True,  
    n_jobs=-1, 
    scoring='accuracy',
    cv=cv, 
)

nb_fit = grid.fit(len_train, y_train)

preds = nb_fit.predict(len_test)

print(confusion_matrix(y_test, preds, labels=['1','0'])) …
Run Code Online (Sandbox Code Playgroud)

python classification scikit-learn

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

SKlearn中具有嵌套交叉验证的分类报告

是否可以通过一些解决方法从cross_val_score获取分类报告?我正在使用嵌套交叉验证,我可以在这里获得一个模型的各种分数,但是,我想看到外循环的分类报告.有什么建议?

# Choose cross-validation techniques for the inner and outer loops,
# independently of the dataset.
# E.g "LabelKFold", "LeaveOneOut", "LeaveOneLabelOut", etc.
inner_cv = KFold(n_splits=4, shuffle=True, random_state=i)
outer_cv = KFold(n_splits=4, shuffle=True, random_state=i)

# Non_nested parameter search and scoring
clf = GridSearchCV(estimator=svr, param_grid=p_grid, cv=inner_cv)

# Nested CV with parameter optimization
nested_score = cross_val_score(clf, X=X_iris, y=y_iris, cv=outer_cv)
Run Code Online (Sandbox Code Playgroud)

我想在评分值旁边看到分类报告. http://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html

classification machine-learning scikit-learn cross-validation

8
推荐指数
2
解决办法
4452
查看次数

如何计算Scikit中多类分类的混淆矩阵?

我有一个多类分类任务.当我基于scikit示例运行我的脚本时如下:

classifier = OneVsRestClassifier(GradientBoostingClassifier(n_estimators=70, max_depth=3, learning_rate=.02))

y_pred = classifier.fit(X_train, y_train).predict(X_test)
cnf_matrix = confusion_matrix(y_test, y_pred)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

File "C:\ProgramData\Anaconda2\lib\site-packages\sklearn\metrics\classification.py", line 242, in confusion_matrix
    raise ValueError("%s is not supported" % y_type)
ValueError: multilabel-indicator is not supported
Run Code Online (Sandbox Code Playgroud)

我试图传递labels=classifier.classes_confusion_matrix(),但它没有帮助.

y_test和y_pred如下:

y_test =
array([[0, 0, 0, 1, 0, 0],
   [0, 0, 0, 0, 1, 0],
   [0, 1, 0, 0, 0, 0],
   ..., 
   [0, 0, 0, 0, 0, 1],
   [0, 0, 0, 1, 0, 0],
   [0, 0, 0, 0, 1, 0]]) …
Run Code Online (Sandbox Code Playgroud)

python classification confusion-matrix scikit-learn

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