标签: classification

特征归一化后 kNN 分类的准确率下降?

我正在对一些数据进行kNN分类。我有按 80/20 的比例随机分割训练集和测试集的数据。我的数据如下所示:

[ [1.0, 1.52101, 13.64, 4.49, 1.1, 71.78, 0.06, 8.75, 0.0, 0.0, 1.0], 
  [2.0, 1.51761, 13.89, 3.6, 1.36, 72.73, 0.48, 7.83, 0.0, 0.0, 2.0],
  [3.0, 1.51618, 13.53, 3.55, 1.54, 72.99, 0.39, 7.78, 0.0, 0.0, 3.0],
  ...
]
Run Code Online (Sandbox Code Playgroud)

矩阵最后一列中的项目是类:1.0、2.0 和 3.0特征标准化

后,我的数据如下所示:

[[-0.5036443480260487, -0.03450760227559746, 0.06723230162846759, 0.23028986544844693, -0.025324623254270005, 0.010553065215338569, 0.0015136367098358505, -0.11291235596166802, -0.05819669234942126, -0.12069793876044387, 1.0], 
[-0.4989050339943617, -0.11566537753097901, 0.010637426608816412, 0.2175704556290625, 0.03073267976659575, 0.05764598316498372, -0.012976783512350588, -0.11815839520204152, -0.05819669234942126, -0.12069793876044387, 2.0],
...
]
Run Code Online (Sandbox Code Playgroud)

我用于标准化的公式:

(X - avg(X)) / (max(X) - min(X))
Run Code Online (Sandbox Code Playgroud)

我对K …

classification machine-learning normalization nearest-neighbor knn

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

如何在 Sklearn 中将 fit_params 用于带有 VotingClassifier 的 RandomizedSearch?

您好,我正在尝试在 Sklearn 中使用 fit_params (用于 GradientBoostingClassifier 上的sample_weight)和 VotingClassifier 进行随机搜索,因为数据集不平衡。有人可以给我建议和可能的代码示例吗?

我当前无法工作的代码如下:

random_search = RandomizedSearchCV(my_votingClassifier, param_distributions=param_dist,
                                   n_iter=n_iter_search, n_jobs=-1, fit_params={'sample_weight':y_np_array})
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError: fit() got an unexpected keyword argument 'sample_weight'
Run Code Online (Sandbox Code Playgroud)

classification machine-learning scikit-learn grid-search

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

在训练后、预测前更改 scikit SVM 中的偏差参数 b

我正在用于sklearn.svm.SVC分类问题。在对我的数据进行训练后,我想通过多个值循环偏差(即通常的符号(wx + b)SVM方程中的b项),以产生ROC曲线。(我已经执行了交叉验证并选择了我的超参数,因此这是用于测试的)。

我尝试使用该.intercept_属性,但这并没有改变我从中得到的结果.predict()......是否有其他方法可以改变偏差项?

我有可能恢复支持向量,然后实现我自己的.predict()函数,并改变偏差,但这似乎是一种相当严厉的方法。

python classification machine-learning scikit-learn

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

sklearn自定义记分器一次多个指标

我有一个返回Observation带有多个记分器的对象的函数,如何将其集成到自定义 sklearn 记分器中?我将其定义为:

class Observation():
    def __init__(self):
        self.statValues = {}
        self.modelName = ""

    def setModelName(self, nameOfModel):
        self.modelName = nameOfModel

    def addStatMetric(self, metricName,metricValue):
        self.statValues[metricName] = metricValue
Run Code Online (Sandbox Code Playgroud)

自定义分数的定义如下:

def myAllScore(y_true, y_predicted):
    return Observation
my_scorer = make_scorer(myAllScore)
Run Code Online (Sandbox Code Playgroud)

这可能看起来像

{   'AUC_R': 0.6892943119440752,
    'Accuracy': 0.9815382629183745,
    'Error rate': 0.018461737081625407,
    'False negative rate': 0.6211453744493393,
    'False positive rate': 0.0002660016625103907,
    'Lift value': 33.346741089307166,
    'Precision J': 0.9772727272727273,
    'Precision N': 0.9815872808592603,
    'Rate of negative predictions': 0.0293063938288739,
    'Rate of positive predictions': 0.011361068973307943,
    'Sensitivity (true positives rate)': 0.3788546255506608,
    'Specificity …
Run Code Online (Sandbox Code Playgroud)

python scoring classification scikit-learn

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

如何计算Google Earth Engine中分类图像(Landsat)中每个类别的像素总和?

我正在写一篇关于冰川变化的论文。我对 Landsat 8 图像进行了监督分类,我想计算每个类别中有多少像素。顺便我想做一个图表。

但我卡住了,我的代码出错了。我尝试使用带有指定参数的 ui.Chart.image.byClass() 方法,但不起作用。

我的代码:

var img = ee.Image('LANDSAT/LC8_L1T_TOA/LC81940282016238LGN00') ; 

// Add pseudocolor image
Map.addLayer(img, {bands: ['B6', 'B5', 'B4'] }, 'Pseudocolor image' ) ; 

// Training points for classification - Point geometries
var points = [class1,class2,class3, class4, class5] ; 
var trainingPoints = ee.FeatureCollection(points) ; 

var training = img.sampleRegions(trainingPoints, ['class'] ,30) ; 

var trained = ee.Classifier.minimumDistance().train(training, 'class' ) ; 
var classified = img.classify(trained) ; 

var palette = ['red','red', '#696969' , '#90EE90' , '#008000' ]  ;

Map.addLayer(classified, {min: 0 …
Run Code Online (Sandbox Code Playgroud)

javascript classification google-earth google-earth-engine

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

如何查找字符二元组和三元组?

问题:

\n\n

查找域名的二元组、三元组和二元组分数。我有一个数据集,我想使用一些简单的分类来区分它们是否是 dga 域。所以我想从使用二元组、三元组和熵开始。

\n\n

我尝试过的:

\n\n
from nltk import ngrams\nsentence = 'some big sentence'\nn = 2\nsixgrams = ngrams(sentence.split(), n)\nfor grams in sixgrams:\nprint grams\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里我得到了一个句子的二元组。但我的意图不是这个。

\n\n

我想转换

\n\n

示例域:google.co.in

\n\n
bigrams\n\n[\xe2\x80\x98$g\xe2\x80\x99, \xe2\x80\x98go\xe2\x80\x99, \xe2\x80\x98oo\xe2\x80\x99, \xe2\x80\x98og\xe2\x80\x99, \xe2\x80\x98gl\xe2\x80\x99, \xe2\x80\x98le\xe2\x80\x99, \xe2\x80\x98e$\xe2\x80\x99, \xe2\x80\x98$c\xe2\x80\x99, \xe2\x80\x98co\xe2\x80\x99, \xe2\x80\x98o$\xe2\x80\x99, \xe2\x80\x98$i\xe2\x80\x99, \xe2\x80\x98in\xe2\x80\x99, \xe2\x80\x98n$\xe2\x80\x99]\ntrigrams\n\n[\xe2\x80\x98$go\xe2\x80\x99, \xe2\x80\x98goo\xe2\x80\x99, \xe2\x80\x98oog\xe2\x80\x99, \xe2\x80\x98ogl\xe2\x80\x99, \xe2\x80\x98gle\xe2\x80\x99, \xe2\x80\x98le$\xe2\x80\x99, \xe2\x80\x98$co\xe2\x80\x99, \xe2\x80\x98co$\xe2\x80\x99, \xe2\x80\x98$in\xe2\x80\x99, \xe2\x80\x98in$\xe2\x80\x99]\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后计算 bigrams_score。从中我可以用它来预测模块并进行分析。

\n\n

谁能帮助我了解如何解决这个问题?

\n

python classification machine-learning nltk python-3.x

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

深度学习模型中以前从未见过的课程

我有一个基本问题。据说我正在训练猫和狗的图像分类器。但我需要一个额外的功能。如果图像不属于任何类别,我如何才能知道它。我想到的一些选择是:

  1. 我在最后一层添加了第三个神经元,而不是 2 个神经元。并将我的训练标签 y 作为 3 个标签的一个热编码,第三个标签不属于猫类或狗类。我将在第三堂课中使用一些随机的例子。
  2. 我将只使用 2 个神经元,并使用一些概率阈值,我将用它来告诉我的图像应该属于哪个类。

但我认为任何方法都不可行。

谁能建议我一种好的技术来对不属于我的训练类别的图像进行分类?

classification machine-learning neural-network deep-learning keras

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

GPflow分类:后验方差的解释

GPflow 网站上的多类分类教程中,稀疏变分高斯过程 (SVGP) 用于一维玩具示例。与所有其他 GPflow 模型的情况一样,SVGP 模型有一个方法predict_y(self, Xnew)可以返回点处保留数据的均值和方差Xnew

从教程中可以清楚地看出,解压缩的第一个参数是三个类别(单元格和)predict_y中每一个类别的后验预测概率,如下图第二个面板中的彩色线所示。然而,作者没有详细说明可以从 中解压缩的第二个参数,即预测的方差。在回归设置中,它的解释对我来说很清楚,因为在这种情况下后验预测分布将是高斯分布。[7][8]predict_y


但我不明白这里的解释是什么。特别是,我想知道如何使用此度量来构建误差线,表示任何新数据点的类预测的不确定性。


我稍微修改了教程的代码,在下面的图中添加了一个附加面板:第三个面板以黑色显示最大标准差(从 获得的方差的平方根predict_y)。显然,它是衡量不确定性的一个很好的指标,而且最高可能值为 0.5 也可能并非巧合,但我找不到它的计算方式及其代表的含义。

黑线:三者中最高方差

此处包含所有代码的完整笔记本。

def plot(m):
f = plt.figure(figsize=(12,8))
a1 = f.add_axes([0.05, 0.05, 0.9, 0.5])
av = f.add_axes([0.05, 0.6, 0.9, 0.1])
a2 = f.add_axes([0.05, 0.75, 0.9, 0.1])
a3 = f.add_axes([0.05, 0.9, 0.9, 0.1])


xx = np.linspace(m.X.read_value().min()-0.3, m.X.read_value().max()+0.3, 200).reshape(-1,1)
mu, var = m.predict_f(xx)
mu, var = mu.copy(), var.copy()
p, v = m.predict_y(xx)

a3.set_xticks([]) …
Run Code Online (Sandbox Code Playgroud)

python classification machine-learning gpflow

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

如何缩小词袋模型?

问题标题说明了一切:如何使词袋模型更小?我使用随机森林和词袋功能集。我的模型大小达到 30 GB,并且我确信特征集中的大多数单词对整体性能没有贡献。

如何在不损失(太多)性能的情况下缩小大词袋模型?

nlp classification random-forest scikit-learn text-classification

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

如何在sklearn的交叉验证中获得多类roc_auc?

我有一个分类问题,我想在 sklearn 中roc_auc使用该值cross_validate。我的代码如下。

from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :2]  # we only take the first two features.
y = iris.target

from sklearn.ensemble import RandomForestClassifier
clf=RandomForestClassifier(random_state = 0, class_weight="balanced")

from sklearn.model_selection import cross_validate
cross_validate(clf, X, y, cv=10, scoring = ('accuracy', 'roc_auc'))
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误。

ValueError: multiclass format is not supported
Run Code Online (Sandbox Code Playgroud)

请注意,我roc_auc特别选择的是它同时支持binarymulticlass分类,如:https : //scikit-learn.org/stable/modules/model_evaluation.html

我也有二进制分类数据集。请让我知道如何解决此错误。

如果需要,我很乐意提供更多详细信息。

python classification machine-learning scikit-learn cross-validation

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