我正在使用libsvm,我必须实现多类的分类,而不是全部.
我该怎么做?2011版本
是否libsvm使用此功能?
我认为我的问题不是很清楚.如果libsvm没有自动使用one,那么我将为每个类使用一个svm,否则我如何在svmtrain函数中定义这个参数.我读过libsvm的自述文件.
我使用Python distutils2/packaging进入了这个概念 .
我确实谷歌它,但没有完全掌握这个想法,所以宁愿从更有经验的人那里得到更好的解释,以更好地理解这个概念.
"Trove分类器用于分类(搜索是一个很好的结果).这是一个准确的问题.PyPy,IronPython和Jython 不是编程语言,它们是Python编程语言的实现.Shedskin和Cython是类似python的编程语言(是的,子集和主要是超集)."
和,
"能够指定一个包被测试(已知可以使用)替代实现是有用的.例如,我会用pypy和Jython标记"mock",因为我经常测试这些实现并知道有用."
到目前为止,这是受支持的 分类器列表.
因此,我正处于下一步的交叉路上,我开始学习并在复杂的数据集上应用一些机器学习算法,现在我已经完成了这项工作.我的计划从一开始就是结合两种可能的分类器,试图建立一个多分类系统.
但这里是我被困的地方.我选择聚类算法(模糊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
数据挖掘领域是否有任何关于对具有一对多关系的数据进行分类的研究?
例如,像这样的问题,我说我试图根据他们的班级和个人信息来预测哪些学生将退学.显然,学生个人信息与他们在课堂上取得的成绩之间存在一对多的关系.
明显的方法包括:
聚合 - 可以以某种方式将多个记录聚合在一起,将问题简化为基本分类问题.在学生分类的情况下,他们的成绩的平均值可以与他们的个人数据相结合.虽然这种解决方案很简单,但通常会丢失关键信息.例如,如果大多数采用有机化学并且低于C-结束的学生即使他们的平均水平高于B +等级也会辍学.
投票 - 创建多个分类器(通常是弱分类器)并让他们投票以确定相关数据的整体类别.这就像是建立了两个分类器,一个用于学生的课程数据,一个用于他们的个人数据.每个课程记录将被传递到课程分类器,并根据成绩和课程名称,分类器将预测学生是否会单独使用该课程记录退学.将使用个人数据分类器对个人数据记录进行分类.然后,所有课堂记录预测以及个人信息记录预测将被一起投票.这种投票可以通过多种不同的方式进行,但很可能会考虑分类器的准确程度以及分类器的确定性.显然,该方案允许比聚合更复杂的分类模式,但是涉及许多额外的复杂性.此外,如果投票表现不佳,准确性很容易受到影响.
所以我正在寻找具有一对多关系的数据分类的其他可能解决方案.
algorithm classification machine-learning database-relations data-mining
我知道了;博士;
我会试着解释一下我的问题而不用烦人的代码来打扰你.我正在完成一项学校作业.我们有蓝精灵的照片,我们必须通过前景背景分析找到它们.我在java中有一个决策树,其中所有数据(HSV直方图)都是一个节点.然后尝试找到最佳属性(来自直方图数据)以分割树.然后执行拆分并创建左侧和右侧子树,并在两个节点树上拆分数据.所有数据仍保留在主树中,以便能够计算基尼指数.
因此,经过26分钟的分析蓝精灵,我的电脑有一个巨大的树与分裂和其他数据.现在我的问题是,任何人都可以给我一个关于如何分析新图片并确定哪些像素可能是"蓝图像素"的全局概念.我知道我必须使用新smurf的HSV直方图生成一个新的数据点数组,然后我需要使用生成的树来确定哪些像素属于smurf.
任何人都可以给我一个如何做到这一点的指针?
一些额外的信息.
每个Decision Tree对象都有一个Split对象,该对象具有要拆分的最佳属性,要拆分的值和gini索引.
如果我需要提供任何其他信息,我想听听.
classification machine-learning image-processing image-recognition decision-tree
我使用libsvm进行多类分类.如何将分类分数与分类的置信度与给定样本的输出进行比较,如下所示:
Class 1: score1
Class 2: score2
Class 3: score3
Class 4: score4
Run Code Online (Sandbox Code Playgroud) 由于我的分类器在测试数据上的准确率大约为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
我正在研究二元分类模型,分类器是天真的贝叶斯.我有一个几乎平衡的数据集,但是当我预测时,我收到以下错误消息:
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) 是否可以通过一些解决方法从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
我有一个多类分类任务.当我基于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) classification ×10
python ×4
scikit-learn ×4
libsvm ×2
matlab ×2
svm ×2
algorithm ×1
bayesian ×1
data-mining ×1
statistics ×1