精华内容
下载资源
问答
  • 我正在做一些多类文本分类,它可以很好地满足我的需求:classifier = Pipeline([('vect', CountVectorizer(tokenizer=my_tokenizer, stop_words=stopWords, ngram_range=(1, 2), min_df=2)),('tfidf', ...

    我正在做一些多类文本分类,它可以很好地满足我的需求:

    classifier = Pipeline([

    ('vect', CountVectorizer(tokenizer=my_tokenizer, stop_words=stopWords, ngram_range=(1, 2), min_df=2)),

    ('tfidf', TfidfTransformer(norm='l2', use_idf=True, smooth_idf=True, sublinear_tf=False)),

    ('clf', MultinomialNB(alpha=0.01, fit_prior=True))])

    categories = [list of my possible categories]

    # Learning

    news = [list of news already categorized]

    news_cat = [the category of the corresponding news]

    news_target_cat = numpy.searchsorted(categories, news_cat)

    classifier = classifier.fit(news, news_target_cat)

    # Categorizing

    news = [list of news not yet categorized]

    predicted = classifier.predict(news)

    for i, pred_cat in enumerate(predicted):

    print(news[i])

    print(categories[pred_cat])

    现在,我想要预测的类别是预测变量的“确定性”(例如:0.0 – >“我已经掷骰子选择一个类别”最多1.0 – >;“没有什么能改变我的关注那个新闻的类别“).我应该如何获得该类别的确定性值/预测值得分?

    解决方法:

    如果您需要类别概率之类的东西,则必须使用分类器的predict_proba()方法.

    标签:python,machine-learning,classification,scikit-learn

    来源: https://codeday.me/bug/20190628/1312466.html

    展开全文
  • 二元分类器在两个类中区分,而多类分类器(也称为多项分类器)可以区分两个以上的类。有一些算法(如随机森林分类器或朴素贝叶斯分类器)可以直接处理多个类。也有一些严格的二元分类器(如支持向量机分类器或线性...

    二元分类器在两个类中区分,而多类分类器(也称为多项分类器)可以区分两个以上的类。有一些算法(如随机森林分类器或朴素贝叶斯分类器)可以直接处理多个类。也有一些严格的二元分类器(如支持向量机分类器或线性分类器)。但是,有多种策略可以让你用几个二元分类器实现多类分类的目的。

    我们这里使用的是mnist数据集。

    OVR
    要创建一个系统将数字图片分为10类(从0到9),一种方法是训练10个二元分类器,每个数字一个(0检测器、1检测器、2检测器,以此类推)。然后,当你需要对一张图片进行检测分类时,获取每个分类器的决策分数,哪个分类器给分最高,就将其分为哪个类。这称为一对剩余(OvR)策略,也称为一对多(oneversusall)。

    OVO
    另一种方法是为每一对数字训练一个二元分类器:一个用于区分0和1,一个区分0和2,一个区分1和2,以此类推。这称为一对一(OvO)策略。如果存在N个类别,那么这需要训练N×(N1)/2个分类器。对于MNIST问题,这意味着要训练45个二元分类器!当需要对一张图片进行分类时,你需要运行45个分类器来对图片进行分类,最后看哪个类获胜最多。OvO的主要优点在于,每个分类器只需要用到部分训练集对其必须区分的两个类进行训练。

    有些算法(例如支持向量机分类器)在数据规模扩大时表现糟糕。对于这类算法,OvO是一个优先的选择,因为在较小训练集上分别训练多个分类器比在大型数据集上训练少数分类器要快得多。但是对大多数二元分类器来说,OvR策略还是更好的选择。ScikitLearn可以检测到你尝试使用二元分类算法进行多类分类任务,它会根据情况自动运行OvR或者OvO。我们用sklearn.svm.SVC类来试试SVM分类器:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    

    二分类模型

    我们先准备好数据:

    from sklearn.datasets import fetch_openml
    mnist = fetch_openml('mnist_784', version=1)
    X,y = mnist['data'], mnist['target']
    
    X_train, X_test = X[:6000], X[6000:]
    y_train, y_test = y[:6000].astype(np.uint8), y[6000:].astype(np.uint8)
    

    数据准备好了,我们开始训练模型:

    from sklearn.svm import SVC
    svm_clf = SVC()
    svm_clf.fit(X_train, y_train)
    
    SVC()
    

    OK,模型训练好了,我们预测几个数据:

    svm_clf.predict([X[0], X[1]])
    
    array([5, 0], dtype=uint8)
    
    print(y[0], y[1])
    
    5 0
    

    完美,预测正确。

    这段代码使用原始目标类0到9(y_train)在训练集上对SVC进行训练,而不是以“5”和“剩余”作为目标类(y_train_5),然后做出预测(在本例中预测正确)。而在内部,ScikitLearn实际上训练了45个二元分类器,获得它们对图片的决策分数,然后选择了分数最高的类。

    要想知道是不是这样,可以调用decision_function()方法。它会返回10个分数,每个类1个,而不再是每个实例返回1个分数

    some_scores = svm_clf.decision_function([X[1]])
    print(some_scores)
    
    [[ 9.31124939  0.70612005  6.21459611  4.98107511 -0.29750684  8.27747974
       3.82932284  1.74975607  3.81848706  6.05566815]]
    

    我们可以看出,第0个结果的分数最高,所以分类结果为0。

    如果想要强制ScikitLearn使用一对一或者一对剩余策略,可以使用OneVsOneClassifier或OneVsRestClassifier类。只需要创建一个实例,然后将分类器传给其构造函数(它甚至不必是二元分类器)。

    from sklearn.multiclass import OneVsRestClassifier
    ovr_clf = OneVsRestClassifier(SVC())
    ovr_clf.fit(X_train, y_train)
    ovr_clf.predict([X[0]])
    
    array([5], dtype=uint8)
    

    多分类模型

    上述方式使用的是一个二分类模型来计算多分类问题,我们也可以直接使用SGDClassifier, RandomForestClassifer等可用于多分类的模型:

    from sklearn.linear_model import SGDClassifier
    sgd_clf = SGDClassifier()
    sgd_clf.fit(X_train, y_train)
    sgd_clf.predict([X[0]])
    
    array([5], dtype=uint8)
    

    我们看一下分数:

    sgd_clf.decision_function([X[0]])
    
    array([[-562212.94461254, -707645.64712029, -293553.98530211,
             -55603.9170907 , -842804.94696506,   41561.46574389,
            -642257.63484493, -793582.58056233, -381185.27236082,
            -359218.48451935]])
    

    模型好像相当自信,除了5以为,其它score都是负数。

    我们再看一下准确率:

    from sklearn.model_selection import cross_val_score
    cross_val_score(sgd_clf, X_train, y_train, cv=3, scoring='accuracy')
    
    array([0.8595, 0.868 , 0.8625])
    

    所有的测试折叠上都超过了85%。如果是一个纯随机分类器,准确率大概是10%,所以这个结果不是太糟,但是依然有提升的空间。例如,将输入进行简单缩放可以将准确率稍为提高:

    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_train_scaler = scaler.fit_transform(X_train.astype(np.float64))
    cross_val_score(sgd_clf, X_train_scaler, y_train, cv=3, scoring='accuracy')
    
    array([0.867, 0.898, 0.889])
    

    多分类问题的误差分析

    首先看看混淆矩阵。就像之前做的,使用cross_val_predict()函数进行预测,然后调用confusion_matrix()函数:

    from sklearn.model_selection import cross_val_predict
    from sklearn.metrics import confusion_matrix
    y_train_pred = cross_val_predict(sgd_clf, X_train_scaler, y_train, cv=3)
    confusion_matrix = confusion_matrix(y_train, y_train_pred)
    print(confusion_matrix)
    
    [[570   0   3   2   1  11   3   0   2   0]
     [  0 633   8   2   1   6   0   1  18   2]
     [ 10   8 499  10   9   4  11   9  18   3]
     [  3   5  21 512   1  36   1   8  11  10]
     [  4   2   8   0 557   2   9   7  10  24]
     [  5   6   5  25  14 411  10   1  24  13]
     [  4   4   6   0   5   7 578   1   3   0]
     [  3   5   9   3  10   0   1 575   2  43]
     [  3  18  14  17   4  10   8   3 461  13]
     [  7   4   6   8  17   3   0  29   8 519]]
    

    我们可以看到数字主要集中在对角线,说明效果还是比较理想的。

    我们使用更直观的图线方式来看一下混淆矩阵:

    plt.matshow(confusion_matrix, cmap=plt.cm.gray)
    plt.show
    
    <function matplotlib.pyplot.show(close=None, block=None)>
    

    数字5看起来暗一点,这以为着数据集中被判断为5的照片比较少,有可能是5真的少,也有可能我们把5分到了其它类。所以我们看一下错误率:

    row_sums = confusion_matrix.sum(axis=1, keepdims=True)
    nor_conf_mx = confusion_matrix / row_sums
    

    用0填充对角线,只保留错误:

    np.fill_diagonal(nor_conf_mx, 0)
    plt.matshow(nor_conf_mx, cmap=plt.cm.gray)
    plt.show()
    

    现在可以清晰地看到分类器产生的错误种类了。记住,每行代表实际类,而表示预测类。第5列看起来非常亮,说明有许多图片被错误地分类为数字5了。

    分析混淆矩阵通常可以帮助你深入了解如何改进分类器。通过上图来看,你的精力可以花在改进数字5的分类错误上。例如,可以试着收集更多看起来像数字8的训练数据,以便分类器能够学会将它们与真实的数字区分开来。

    反正,发现问题后,你可以通过各种方式来解决这个问题,比如检查样本,把样本一个一个打印出来。你可能发现样本中的3和5非常类型。毕竟我们这里使用的是线性分类器,一些写的不规范的3和5很容易被混淆。

    展开全文
  • 在这篇文章中,我们将使用我最喜欢的机器学习库scikit-learn在Python中实现朴素贝叶斯分类器。接下来,我们将使用经过训练的朴素贝叶斯(监督分类法)模型来预测人口收入。在朴素贝叶斯分类器的文章中我们讨论了贝叶斯...

    在这篇文章中,我们将使用我最喜欢的机器学习库scikit-learn在Python中实现朴素贝叶斯分类器。接下来,我们将使用经过训练的朴素贝叶斯(监督分类法)模型来预测人口收入。

    在朴素贝叶斯分类器的文章中我们讨论了贝叶斯定理,我们希望你对贝叶斯定理的基础知识有一定的了解,如果没有让我们快速地看看贝叶斯定理的基本知识。

    贝叶斯定理是基于条件概率。条件概率可以帮助我们通过已经发生的事情来计算将要发生的事情。如果你不明白,让我们通过以下例子帮助你理解。

    条件概率举例

    下面的例子将帮助我们明白条件概率的定义。当你已经买了iPhone,你会买mac book

    当你去电影院的时候,你会拿一杯清爽的饮料

    当你带来一杯冰镇饮料,你会买花生

    94709377_1

    朴素贝叶斯分类器是通过贝叶斯定理来正常工作。朴素贝叶斯分类器假定所有的特征是彼此独立的,即使特征彼此依赖或者取决于其他特征的存在。 朴素贝叶斯分类器认为所有这些属性独立的为用户购买MacBook的概率做贡献。

    为了学习朴素贝斯定理的关键概念。你可以阅读我们的介绍贝叶斯定理的文章。这将有助于你理解与朴素贝叶斯有关的核心概念。

    在介绍朴素贝叶斯定理的文章中,我们讨论了三种流行的朴素贝叶斯算法:高斯朴素贝叶斯

    多项式朴素贝叶斯

    伯努利朴素贝叶斯

    作为朴素贝叶斯定理文章的扩展,现在我们将在“人口收入”数据集上实现高斯朴素贝叶斯。

    高斯朴素贝叶斯

    高斯朴素贝叶斯算法是一种特殊类型的NB算法,它特别用于当特征具有连续值时。同时假定所有特征都遵循高斯分布,即正态分布。

    人口普查收入数据集

    人口普查收入数据集是预测一个人的收入是否超过$ 50K /年(大于$ 50K /年)或<= $="" 50k="" 。数据由barry="">=>

    这个数据集是UCI存储库贡献的,它在这个链接公开。 数据集由15列离散和连续数据的混合组成。

    Variable NameVariable Range

    1.age[17 – 90]

    2.workclass[‘State-gov’, ‘Self-emp-not-inc’, ‘Private’, ‘Federal-gov’, ‘Local-gov’, ‘Self-emp-inc’, ‘Without-pay’, ‘Never-worked’]

    3.fnlwgt[77516- 257302]

    4.education[‘Bachelors’, ‘HS-grad’, ’11th’, ‘Masters’, ‘9th’, ‘Some-college’, ‘Assoc-acdm’, ‘Assoc-voc’, ‘7th-8th’, ‘Doctorate’, ‘Prof-school’, ‘5th-6th’, ’10th’, ‘1st-4th’, ‘Preschool’, ’12th’]

    5.education_num[1 – 16]

    6.marital_status[‘Never-married’, ‘Married-civ-spouse’, ‘Divorced’, ‘Married-spouse-absent’, ‘Separated’, ‘Married-AF-spouse’, ‘Widowed’]

    7.occupation[‘Adm-clerical’, ‘Exec-managerial’, ‘Handlers-cleaners’, ‘Prof-specialty’, ‘Other-service’, ‘Sales’, ‘Craft-repair’, ‘Transport-moving’, ‘Farming-fishing’, ‘Machine-op-inspct’, ‘Tech-support’, ‘Protective-serv’, ‘Armed-Forces’, ‘Priv-house-serv’]

    8.relationship[‘Not-in-family’, ‘Husband’, ‘Wife’, ‘Own-child’, ‘Unmarried’, ‘Other-relative’]

    9.race[‘White’, ‘Black’, ‘Asian-Pac-Islander’, ‘Amer-Indian-Eskimo’, ‘Other’]

    10.sex[‘Male’, ‘Female’]

    11.capital_gain[0 – 99999]

    12.capital_loss[0 – 4356]

    13.hours_per_week[1 – 99]

    14.native_country[‘United-States’, ‘Cuba’, ‘Jamaica’, ‘India’, ‘Mexico’, ‘South’, ‘Puerto-Rico’, ‘Honduras’, ‘England’, ‘Canada’, ‘Germany’, ‘Iran’, ‘Philippines’, ‘Italy’, ‘Poland’, ‘Columbia’, ‘Cambodia’, ‘Thailand’, ‘Ecuador’, ‘Laos’, ‘Taiwan’, ‘Haiti’, ‘Portugal’, ‘Dominican-Republic’, ‘El-Salvador’, ‘France’, ‘Guatemala’, ‘China’, ‘Japan’, ‘Yugoslavia’, ‘Peru’, ‘Outlying-US(Guam-USVI-etc)’, ‘Scotland’, ‘Trinadad&Tobago’, ‘Greece’, ‘Nicaragua’, ‘Vietnam’, ‘Hong’, ‘Ireland’, ‘Hungary’, ‘Holand-Netherlands’]

    15.income[‘<=50k’, ‘="">50K’]=50k’,>

    最终目标变量由两个值组成:'<=>=>

    高斯NB在人口普查收入数据集上的应用

    导入python机器学习库

    我们需要导入pandas, numpy 和 sklearn库,我们需要从sklearn.preprocessing导入Imputer,Imputer包有助于插补缺失值。

    如果你没有安装python机器学习库,您可以先安装它再来运行本文中的代码。

    94709377_2

    train_test_split模块用于将数据集拆分成训练和测试集。accuracy_score模块将用于计算我们的高斯朴素贝叶斯算法的精度。

    数据导入

    对于人口普查的数据导入,我们使用pandas read_csv方法。 这是一种非常简单和快速的导入数据的方法。

    我们传递四个参数。 'adult.data'参数是文件名。 header参数用于向pandas提供有关第一行数据是否包含头的详细信息。 在我们的数据集中,没有标题。 所以,我们传递None。

    delimiter参数用于为信息提供分隔数据的定界符。 这里,我们使用'*,*'分隔符。 此分隔符包含了数据值前后的空格。 当与数据值一起使用的空格不总是相同个数时,这是非常有帮助。

    让我们向我们的数据框架添加标题。 以下代码段可用于执行此任务

    处理缺失数据

    让我们测试在我们的数据集中是否有任何空值。 我们可以使用is方法。

    脚本输出

    94709377_3

    上面的输出显示在我们的数据集中没有空值。

    让我们测试任何分类属性是否包含'?'。 有时存在'?'或' '代替缺失值。使用下面的代码片段,我们将测试我们的adult_df数据框架是否由具有值为'?'的分类变量组成。

    脚本输出

    上面的代码片段的输出显示工作类属性中有1836个缺失值。 职业属性中1843个,祖国属性中有583个缺失值。

    数据预处理

    对于预处理,我们将制作一份原始数据帧的副本。我们将adult_df复制为adult_df_rev数据帧。

    因为我们要对缺失值执行一些添补。 在这之前,我们需要一些我们的数据框架的概要统计。 为此,我们可以使用describe方法。 它可以用于生成各种汇总统计,不包括NaN值。

    我们传递一个“include”参数,值为“all”,这用于指定我们想要的是所有属性的汇总统计。

    在运行上述命令后,可以检查数据集的基本统计信息。 你可以花一些时间在这里了解每个提供的统计数据的详细信息。

    数据添补步骤

    现在,是时候估算缺失值了。 我们的一些分类中缺少值,即'?'。 我们将用上面描述的方法替换'?'为顶行的值。 例如,我们要用Private值替换工作区属性的?值。

    我们已经执行了数据添补步骤。 ??

    您可以通过打印adult_df_rev来检查数据帧中的更改

    对于朴素贝叶斯定理,我们需要将所有数据值转换成一种数据格式。我们将对所有标签进行编码,其值介于0和n_classes-1之间。

    独热编码器

    为了实现这一点,我们将使用LabelKeeper的SciKit学习库的LabelEncoder。对于编码,我们还可以使用One-Hot编码器。它将数据编码为二进制格式。

    使用上面的代码片段,我们创建了多个分类列,例如“marital_cat”,“race_cat”等。你可以使用adult_df_rev.head查看数据框的前6行。

    通过打印adult_df_rev.head结果,您将能够看到所有的列都应该重新索引。他们不是正确的顺序。要重新索引这些列,您可以使用下面提供的代码段:

    94709377_4

    上述代码片段的输出将显示所有列都正确地重建索引。我已经将列名列表作为参数传递,axis = 1用于重新索引列。

    数据标准化

    我们的数据帧的所有数据值都是数字。现在,我们需要转换它们到统一尺度。我们可以标准化值,使用下面的公式进行标准化。

    94709377_5

    我们已将数据值转换为标准化值。您可以打印并检查dataframe的输出。

    数据切片

    让我们将数据分成训练和测试集。我们可以使用sklearn的train_test_split方法轻松地执行此步骤。

    使用上面的代码片段,我们已经将数据划分为要素和目标集。特征集由14个列组成,即预测变量和目标集由1个具有类值的列组成。

    features_train和target_train由训练数据组成,features_test和target_test由测试数据组成。

    高斯朴素贝叶斯实现

    完成数据预处理后。是时候实现机器学习算法了。我们将使用sklearn的GaussianNB模块。

    我们已经构建了一个GaussianNB分类器。使用训练数据训练分类器。我们可以使用fit方法来训练它。在构建分类器之后,我们准备好模型进行预测。我们可以使用predict方法,测试集特征作为其参数。

    我们的高斯朴素贝叶斯模型的准确性

    现在是时候测试我们的模型的质量,我们做了一些预测。让我们将模型的预测与测试集的实际目标值进行比较。遵循这个方法,我们将计算我们的模型的准确性。

    脚本输出

    0.80141447980643965

    真棒!我们的模型给出的精度为80%。这不是一个简单的实现。您可以创建随机测试数据集并测试模型,以了解训练的高斯朴素贝叶斯模型的表现。

    我们可以用Python pickle保存训练有素的scikit-learn模型。你可以查看如何使用Python Pickle保存训练有素的scikit-learn模型。英文原文:http://dataaspirant.com/2017/02/20/gaussian-naive-bayes-classifier-implementation-python/

    展开全文
  • 多类分类器

    2021-05-02 23:16:26
    # 多类分类器 from sklearn.datasets import fetch_openml minst = fetch_openml('mnist_784',version=1) X,y = minst["data"],minst["target"] X_train,X_test,y_train,y_test = X[:60000],X[60000:],y[:60000],y...

    # 多类分类器

    from sklearn.datasets import fetch_openml
    minst = fetch_openml('mnist_784',version=1)
    X,y = minst["data"],minst["target"]
    X_train,X_test,y_train,y_test = X[:60000],X[60000:],y[:60000],y[60000:]
    some_digit = X[0]

    多类分类器(也称为多项分类器)可以区分两个以上的类。有一些算法(如随机森林分类器或朴素贝叶斯分类器)可以直接处理多个类。也有一些严格的二元分类器(如支持向量机分类器或线性分类器)。
    使用二元分类器实现多类分类的策略,比如要创建一个系统将数字图片分为10类(从0到9)

    1. 一种方法是训练10个二元分类器,每个数字一个(0-检测器、1-检测器、2-检测器,以此类推)。然后,当你需要对一张图片进行检测分类时,获取每个分类器的决策分数,哪个分类器给分最高,就将其分为哪个类。这称为一对剩余(OvR)策略,也称为一对多(one-versus-all)。
    2. 另一种方法是为每一对数字训练一个二元分类器:一个用于区分0和1,一个区分0和2,一个区分1和2,以此类推。这称为一对一(OvO)策略。如果存在N个类别,那么这需要训练N×(N-1)/2个分类器。对于MNIST问题,这意味着要训练45个二元分类器!当需要对一张图片进行分类时,你需要运行45个分类器来对图片进行分类,最后看哪个类获胜最多。OvO的主要优点在于,每个分类器只需要用到部分训练集对其必须区分的两个类进行训练。

    有些算法(例如支持向量机分类器)在数据规模扩大时表现糟糕。对于这类算法,OvO是一个优先的选择,因为在较小训练集上分别训练多个分类器比在大型数据集上训练少数分类器要快得多。但是对大多数二元分类器来说,OvR策略还是更好的选择。Scikit-Learn可以检测到你尝试使用二元分类算法进行多类分类任务,它会根据情况自动运行OvR或者OvO。现在用sklearn.svm.SVC类来试试SVM分类器:

    from sklearn.svm import SVC
    svm_clf = SVC()
    svm_clf.fit(X_train,y_train)
    svm_clf.predict([some_digit])

    使用原始目标类0到9(y_train)在训练集上对SVC进行训练,然后做出预测。
    在内部,Scikit-Learn实际上训练了45个二元分类器,获得它们对图片的决策分数,然后选择了分数最高的类。
    可以通过调用decision_function()方法,查看返回的10个分数,每个类1个,而不再是每个实例返回1个分数:

    import numpy as np
    some_digit_scores = svm_clf.decision_function([some_digit])
    print(some_digit_scores) # 查看10个分数
    # [[ 1.72501977  2.72809088  7.2510018   8.3076379  -0.31087254  9.3132482 1.70975103  2.76765202  6.23049537  4.84771048]]
    print(np.argmax(some_digit_scores)) # 查看最高分对应的索引,5
    print(svm_clf.classes_) #查看所有类别.['0' '1' '2' '3' '4' '5' '6' '7' '8' '9'].当训练分类器时,目标类的列表会存储在classes_属性中,按值的大小排序.本例是刚好索引跟类别一样

    强制Scikit-Learn使用一对一或者一对剩余策略,可以使用OneVsOneClassifier或OneVsRestClassifier类。
    只需要创建一个实例,然后将分类器传给其构造函数(不必是二元分类器)。
    例如,下面这段代码使用OvR策略,基于SVC创建了一个多类分类器:

    from sklearn.multiclass import OneVsRestClassifier
    ovr_clf = OneVsRestClassifier(SVC())
    ovr_clf.fit(X_train,y_train)
    ovr_clf.predict([some_digit]) # array(['5'], dtype='<U1')
    print(len(ovr_clf.estimators_)) # 10

    训练SGDClassifier,Scikit-Learn不必运行OvR或者OvO了,因为SGD分类器直接就可以将实例分为多个类。
    调用decision_function()可以获得分类器将每个实例分类为每个类的概率列表:让我们看一下SGD分类器分配到的每个类

    from sklearn.linear_model import SGDClassifier
    sgd_clf = SGDClassifier(random_state=42)
    sgd_clf.fit(X_train,y_train)
    sgd_clf.predict([some_digit]) # array(['3'], dtype='<U1')预测错误
    sgd_clf.decision_function([some_digit]) # 第3类的的得分最高,是1823,现在使用交叉验证来评估分类器

    对模型进行评估

    from sklearn.model_selection import cross_val_score
    cross_val_score(sgd_clf,X_train,y_train,cv=3,scoring='accuracy') # array([0.87365, 0.85835, 0.8689 ])

    在所有的测试折叠上都超过了85%,这个结果不是太糟,但是依然有提升的空间。例如,将输入进行简单缩放(标准化处理)可以将准确率提到89%以上:

    import numpy as np
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))
    cross_val_score(sgd_clf,X_train_scaled,y_train,cv=3,scoring='accuracy') # array([0.8983, 0.891 , 0.9018])

     

    展开全文
  • 神经网络分类器

    千次阅读 2021-02-18 20:30:34
    感知的激活函数是一个阶跃函数 △w(t)=±ηx(t),x∈错分样本 整体神经网络学习规则 并不是所有输入输出层都能与外界相连,大致有三种学习方案 逐层更新学习 适用于前馈网络 (1)无监督学习模式 在所有神经元的...
  • 机器学习-分类-线性分类器

    千次阅读 2021-12-14 16:33:30
    解决分类问题基本的方法有:线性分类器、决策树、朴素贝叶斯、人工神经网络、K近邻(KNN)、支持向量机(SVM); 组合基本分类器的集成学习算法:随机森林、Adaboost、Xgboost等。 一、线性分类器 线性分类器=...
  • 分类器

    2021-02-13 23:05:08
    原文作者:fuqiuai 原文地址:数据挖掘领域十大经典算法之—SVM算法(超详细附代码) 目录 简介 ...线性分类器起源 ...分类器分类器就是给定一个样本的数据,判定这个样本属于哪个类别的算法。例如在..
  • | Thomas Pernet翻译 | 邓普斯•杰弗、涂世文、Disillusion校对 | 邓普斯•杰弗 审核| 酱番梨 整理 | 菠萝妹原文链接:https://medium.com/@thomaspernet/linear-classifier-aa3ccec96efa什么是线性分类器...
  • 不说废话,直接三步搭建最简单的bert文本多标签分类器 1.去官网https://github.com/google-research/bert 下载一个bert模型 2.搭建bert-service https://github.com/hanxiao/bert-as-service 3.分类demo mb = ...
  • matlab神经网络分类器

    2021-04-23 21:09:34
    应该进行的基本数据处理问题,包括:BP 神经网络 matlab 实现的基本步 骤,数据归一化问题和方法,输入训练数据的乱序排法,以及分类方法,如何查看和保存训 练的结果,......BP神经网络的数据分类_MATLAB源代码_计算机软件...
  • 一、 贝叶斯分类器分类的流程、 二、 贝叶斯分类器分类示例 1
  • 最近在做机器学习,发现很多实用MATLAB中的分类器进行分类的大多为交叉验证,不存在保存模型问题,因此在这里记录一下。 以随机森林为例: 1. 训练代码: 其中classifer即为我们训练好的模型,我们可以选择在...
  • 分类器: 损失函数 优化方法 训练过程 决策 2.设计 线性分类器: 损失函数 示例: 学习目标: 入门计算机视觉第二天 图像分类与线性分类器 学习内容: 图像识别难点:跨越语义鸿沟 基于规则的分类方法 ...
  • KNN是通过测量不同特征值之间的距离进行分类。 二 KNN原理 它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20...
  • 数据挖掘入门与实战 公众号: datadwPart 1: 本篇内容简介在前一篇文章完整手写一个朴素贝叶斯分类器,完成文本分类,我们使用首先假设在文档中出现的单词彼此独立,利用贝叶斯定理,完成了一个简单的文本分类器的...
  • %将分类变量转换成分类数组names = bank.Properties.VariableNames;%使用数据文件,记录自变量和因变量的属性名%'uniform':varfun将值串联成一个向量。@iscellstr在每次调用时都必须返回数据类型相同的标量category ...
  • 1、什么是级联分类器 此处不做详解,可以参考这个博客:https://www.cnblogs.com/wumh7/p/9403873.html 2、分类器样本创建 样本创建是一个比较耗时耗资源的过程,但是前期做好一个优质的样本,对于后期的样本...
  • 本发明涉及模式识别方法,特别是涉及一种AdaBoost算法中弱分类器的同步选取、加权、排序方法。背景技术:分类算法就是基于分类器模型为待检测样本从可选的分类中选取最佳的类别假设,它属于人工智能中机器学习范畴,...
  • 基于Fisher准则线性分类器设计

    千次阅读 2021-01-15 22:11:32
    用 完成 线性分类器的设计,程序的语句要求有注释。 2、根据上述的结果并判断 ,属于哪个类别,并画出数据分类相应的结果图,要求画出其在 上的投影。 实验程序 function fisher %w1中数据点的坐标 x1 =[0.2331 1....
  • 最简单的分类器是近邻分类器。近邻算法搜索训练集,寻找与用作测试的新个体最相似的观测记录。讲到这里,弄清楚训练集和测试集这两个概念很重要。如果确实只有一个数据集,也没关系,重要的是不要使用同一份数据同时...
  • 贝叶斯分类器

    多人点赞 2021-12-08 15:40:14
    贝叶斯分类器是一类分类算法的总称,贝叶斯定理是这类算法的核心,因此统称为贝叶斯分类。在学习贝叶斯分类之前,我们需要了解的一些公式。 预备知识 基本概念 先验概率:根据统计/经验得到的某事情发生的概率,...
  • 手写数字多分类 混淆矩阵 F1 多标签分类器 多输出分类器 Knn #手写数字多分类 from tensorflow import keras from sklearn.svm import SVC import numpy as np import pickle (x_train, y_train), (x_test, y_test) ...
  • 利用决策树,KNN和朴素贝叶斯三种分类器,对鸢尾花数据集进行分类。下面是具体的流程和代码:1、 数据读取:实验数据是直接加载的sklearn内置的鸢尾花数据集,共150条数据,包含4个特征,而且是一个三分类问题。from...
  • 一、朴素贝叶斯分类器的原理朴素贝叶斯方法是基于贝叶斯公式与特征条件独立的假设的分类方法。对于给定的训练数据集,基于特征条件独立的假设学习输入输出的联合概率分布,这样就学到了一个生成模型,然后基于该模型...
  • 一、 贝叶斯分类器、 二、 贝叶斯分类器处理多属性数据集方案
  • python 朴素贝叶斯分类器之分类实操 基本概念 鲁棒性 Huber从稳健统计的角度系统地给出了鲁棒性3个层面的概念: 1.是模型具有较高的精度或有效性,这也是对于机器学习中所有学习模型的基本要求; 2.是对于模型假设...
  • 分类器模型好坏「和」分类器的评价指标 1. 为什么需要评价? 训练目标函数只是理想目标函数的一种近似。 评价指标可以量化模型在不同方面的表现(查全、查准…)。 Rank,可以帮助算法人员在特定的目标上不断...
  • Opencv训练自己分类器

    2021-03-25 08:36:57
    1.1.3 准备好工作目录 negdata目录: 放负样本的目录 posdata目录: 放正样本的目录 xml目录: 新建的一个目录,为之后存放分类器文件使用 negdata.txt: 负样本路径列表 posdata.txt: 正样本路径列表 pos.vec: ...
  • 最大似然分类器

    2021-01-03 02:46:41
    matlab实现最大似然分类对图像处理

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 810,392
精华内容 324,156
关键字:

分类器种类