专栏名称: 人工智能头条
专注人工智能技术前沿、实战技巧及大牛心得。
目录
相关文章推荐
爱可可-爱生活  ·  //@爱可可-爱生活:欢迎参与!-20250 ... ·  2 天前  
AIGC开放社区  ·  AI紧箍咒!OpenAI发布CoT监控,阻止 ... ·  2 天前  
AIGC开放社区  ·  AI紧箍咒!OpenAI发布CoT监控,阻止 ... ·  2 天前  
爱可可-爱生活  ·  图神经网络的统计物理学分析 查看图片 ... ·  3 天前  
爱可可-爱生活  ·  自学型工具推理模型 START 查看图片 ... ·  3 天前  
51好读  ›  专栏  ›  人工智能头条

sklearn 与分类算法

人工智能头条  · 公众号  · AI  · 2019-03-12 19:11

正文

【导读】众所周知,Scikit-learn(以前称为 scikits.learn)是一个用于 Python 编程语言的免费软件机器学习库。它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-means 和 DBSCAN,旨在与 Python 数值和科学库NumPy和SciPy互操作。

本文将带你入门常见的机器学习分类算法——逻辑回归、朴素贝叶斯、KNN、SVM、决策树。

01

逻辑回归 (Logistic regression)

逻辑回归,尽管他的名字包含"回归",却是一个分类而不是回归的线性模型。逻辑回归在文献中也称为 logit 回归,最大熵分类或者对数线性分类器。下面将先介绍一下 sklearn 中逻辑回归的接口:

class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='warn', max_iter=100, multi_class='warn', verbose=0, warm_start=False, n_jobs=None)

常用参数讲解:

penalty: 惩罚项。一般都是"l1"或者"l2"。

dual :这个参数仅适用于使用 liblinear 求解器的"l2"惩罚项。 一般当样本数大于特征数时,这个参数置为 False。

C: 正则化强度(较小的值表示更强的正则化),必须是正的浮点数。

solver: 参数求解器。一般的有{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}。

multi_class: 多分类问题转化,如果使用 "ovr",则是将多分类问题转换成多个二分类为题看待;如果使用 "multinomial",损失函数则会是整个概率分布的多项式拟合损失。

不常用的参数这里就不再介绍,想要了解细节介绍,可以sklearn的官网查看。

案例:

这里我使用 sklearn 内置的数据集——iris 数据集,这是一个三分类的问题,下面我就使用逻辑回归来对其分类:

from sklearn.datasets import load_irisfrom sklearn.linear_model import LogisticRegressionX, y = load_iris(return_X_y=True)clf = LogisticRegression(random_state=0, solver='lbfgs',                         multi_class='multinomial').fit(X, y)

上面我就训练好了一个完整的逻辑回归模型,我们可以用 predict 这个函数对测试集进行预测。

clf.predict(X[:2, :])

如果想知道预测的概率,可以通过 predict_proba 这个函数来进行预测。

clf.predict_proba(X[:2, :])

如果想知道我们预测的准确性,可以通过 score 这个函数来判断我们的模型好坏。

clf.score(X, y)

02

朴素贝叶斯

朴素贝叶斯方法是一组基于贝叶斯定理的监督学习算法,在给定类变量值的情况下,朴素假设每对特征之间存在条件独立性。下面我将介绍几种朴素贝叶斯的方法。

1. 高斯朴素贝叶斯 (GaussianNB)

高斯朴素贝叶斯的原理可以看这篇文章:http://i.stanford.edu/pub/cstr/reports/cs/tr/79/773/CS-TR-79-773.pdf

这里,我将介绍如何使用 sklearn 来实现 GaussianNB。

from sklearn import datasetsiris = datasets.load_iris()from sklearn.naive_bayes import GaussianNBgnb = GaussianNB()y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)print("Number of mislabeled points out of a total %d points : %d"      % (iris.data.shape[0],(iris.target != y_pred).sum()))

2. 多项式朴素贝叶斯 (MultinomialNB/MNB)

这里我随机生成一组数据,然后使用 MultinomialNB 算法来学习。

import numpy as npX = np.random.randint(50, size=(1000, 100))y = np.random.randint(6, size=(1000))from sklearn.naive_bayes import MultinomialNBclf = MultinomialNB()clf.fit(X, y)
print(clf.predict(X[2:3]))

3. 互补朴素贝叶斯 (ComplementNB/CMB)

ComplementNB 是标准多项式朴素贝叶斯(MNB)算法的一种改进,特别适用于不平衡数据集。

具体来说,ComplementNB 使用来自每个类的补充的统计信息来计算模型的权重。CNB 的发明者通过实验结果表明,CNB 的参数估计比 MNB 的参数估计更稳定。此外,在文本分类任务上,CNB 通常比 MNB 表现得更好(通常是相当大的优势)。

CNB 的 sklearn 接口:

class sklearn.naive_bayes.ComplementNB(alpha=1.0, fit_prior=True, class_prior=None, norm=False)

常用参数讲解:

alpha: 加性(拉普拉斯/Lidstone)平滑参数(无平滑为0)。

fit_prior: 是否学习类先验概率。若为假,则使用统一先验。

class_prior : 类的先验概率。如果指定,则不根据数据调整先验。

norm : 是否执行权重的第二次标准化。

案例:

import numpy as npX = np.random.randint(50, size=(1000, 100))y = np.random.randint(6, size=(1000))from sklearn.naive_bayes import ComplementNBclf = ComplementNB()clf.fit(X, y)
print(clf.predict(X[2:3]))

4. 伯努利朴素贝叶斯 (BernoulliNB)

BernoulliNB 实现了基于多元伯努利分布的数据的朴素贝叶斯训练和分类算法。BernoulliNB 可能在某些数据集上表现得更好,特别是那些文档较短的数据集。BernoulliNB 的 sklearn 与上面介绍的算法接口相似。

案例:

import numpy as npX = np.random.randint(50, size=(1000, 100))y = np.random.randint(6, size=(1000))from sklearn.naive_bayes import BernoulliNBclf = BernoulliNB()clf.fit(X, Y)
print(clf.predict(X[2:3]))

03

K-Nearest Neighbors (KNN)







请到「今天看啥」查看全文