机器学习分类算法 - 逻辑回归、朴素贝叶斯、KNN、SVM、决策树
Scikit-learn(以前称为 scikits.learn)是一个用于 Python 编程语言的免费机器学习软件库。它具有各种分类、回归和聚类算法,包括支持向量机、随机森林、梯度提升、k-means 和 DBSCAN,旨在与数值和科学 Python 库 NumPy 和 SciPy 配合使用。 本文将向您介绍常见的机器学习分类算法——逻辑回归、朴素贝叶斯、KNN、SVM 和决策树。
逻辑回归(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)
常用参数说明:
惩罚: ❓ 犯罪物品。这通常是“l1”或“l2”。 dual:此参数仅适用于使用 liblinear 求解器的“l2”惩罚时间。一般情况下,当样本数大于特征数时,该参数设置为False。 C:调节强度(值越低表示正则化越强),必须是正浮点数。 求解器: 参数求解器。常见的包括 {'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}。 multi_class:多分类问题转换。如果使用“ovr”,多分类问题就转化为几个二分类问题。如果使用“多项式”,则损失函数将是整个概率分布。多项式损失。 不常用的参数这里不再列出。想了解详细内容可以查看sklearn官网。 案例: 这里我使用的是内置的sklearn数据集——iris数据集。这是一个三分类问题。接下来,我使用逻辑回归对其进行分类: 上面我训练了一个完整的逻辑回归模型。我们可以使用函数 predict 来预测测试集。 如果想知道预测的概率,可以通过函数predict_proba进行预测。 如果你想知道我们预测的准确性,你可以使用函数score来判断我们模型的质量。 朴素贝叶斯 朴素贝叶斯是一组基于贝叶斯定理的监督学习算法。给定类变量的值,假设每对特征之间具有朴素贝叶斯条件独立性。下面我将介绍一些朴素贝叶斯方法。 1。高斯朴素贝叶斯(GaussianNB) 关于高斯朴素贝叶斯的原理,可以阅读这篇文章: http://i.stanford.edu/pub/cstr/reports/cs/ tr/79/773/ CS-TR -79-773.pdf 这里我会介绍如何使用sklearn来实现GaussianNB。 2。多项式朴素贝叶斯(MultinomialNB/MNB) 这里我随机生成一个数据集,然后使用MultinomialNB算法进行学习。 3.互补朴素贝叶斯 (ComplementNB/CMB) ComplementNB 是一种标准多项式朴素贝叶斯 (MNB) 算法,特别适用于不平衡数据集。具体来说,ComplementNB 使用每个类别的互补统计信息来计算模型权重。 CNB的发明人通过实验结果表明,CNB的参数估计比MNB的参数估计更加稳定。此外,CNB 在文本分类任务中普遍优于 MNB(通常大幅领先)。 sklearn 接口CNB: alpha:常用参数说明Add (Laplacian/Lidstone)参数平滑(无平滑为0)。 fit_prior:是否学习之前课程的概率。如果为假,则使用统一先验。 class_prior:类别的先验概率。如果指定,则不会根据数据修改之前的内容。 norm:是否对尺度进行二次归一化。 案例: 4.伯努利朴素贝叶斯(BernoulliNB) BernoulliNB 实现伯努利的多元朴素贝叶斯训练和分类分布式数据。 BernoulliNB 在某些数据集上可能表现更好,尤其是那些文档较短的数据集。 Sklearn BernoulliNB 与上面介绍的算法界面类似。 案例: K-最近邻(KNN) KNN 基于每个查询点的最近邻实现学习 ,其中 k 是用户输入的整数值。它是最经典的机器学习算法之一。 KNN中的skearn接口如下: 常用参数说明: n_neighbors:邻居数量是KNN中最重要的参数。 算法:计算最近邻的算法。常用的算法包括{'auto', 'ball_tree', 'kd_tree', 'brute'}。 案例: 支持向量机 (SVM) 支持向量机 (SVM) 是一组用于分类、回归和异常值检测的监督学习方法。这里我只会介绍分类方法 支持向量机的优点是:在高维空间中高效,当维数大于样本数时仍然高效,因此对于小数据集,SVM可以表现出良好的性能。和NuSVC一样。常用的接口一般是SVC。 sklearn SVC 接口: 常用参数说明: C :♿ 参数 C kernel:选择核函数。常用的核函数有:“线性”、“聚”、“rbf”、“sigmoid”、“预计算”。 概率:是否在预测中使用概率估计。 案例: 扩展:SVM在解决二分类问题上有独特的优势,但解决多分类问题却非常困难。常见的解决方案是针对多分类问题采用一对一的方法。具体来说,给定一个 n_class 分类问题,将创建 n_class*(n_class-1)/2 个二元分类来解决这个多分类问题。 决策树 作为十大经典算法之一,决策树可以很好地处理多分类问题。 sklearn决策树接口: 常用参数说明: 测量标准为 分裂。常见的有计算基尼系数的“基尼”和计算信息增益的“熵”。 max_深度:树的最大深度。 min_samples_split:分割内部节点所需的最小样本数。 min_samples_leaf: 叶节点上所需的最小样本数。 案例: 总结 本文介绍了几种常见的机器学习分类算法,例如Logistic Regression❀❝ 作者 |何从庆 本文转载自AI算法心(ID:AIHeartForYou)from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegressionX, y = load_iris (return_X'″=Logicstate=Logicstate) 0,solver=' lbfgs' , multi_class='multinomial').fit (X, y)clf.predict(X[:2, :])clf.predict_proba(X[:2, :])clf.score(X, y)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("错误数%d 点总数中的点:%d" % (iris.data.shape[0],(iris.target != y_pred).sum())) 将 numpy 导入为 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]))class sklearn.naive_bayes.ComplementNB(alpha=1.0, fit_prior=True, class_prior=None,norm=False)导入 numpy as npX = np.random.randint(50, size=(1000, 100))y = np.random.randint(6, size=(1000))from sklearn.naive_bayes ComplementNBclf = ComplementNB()clf.fit(X, y)print(clf.predict(X[2:3]))从 sklearn.naive_bayes BernoulliNBclf 导入 numpy as npX = np.random.randint(50, size=(1000, 100))y = np.random.randint(6, size=(1000)) = BernoulliNB()clf.fit(X, Y)print(clf.predict(X[2:3]))class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,weights='uniform',algorithm='auto',leaf_size=30,p=2,metric'metric_params= None, n_jobs=None, **kwargs)from sklearn import datasetsiris = datasets.load_iris()from sklearn.neighbors import KNeighborsClassifierneigh = KNeighborsClassifier(n_neighbors=3)neigh.fit(neightar.data,iicpredris print(iris.data, iticpredris) iris. data))print(neigh.predict_proba((iris.data))class sklearn.svm.SVC(C=1.0, kernel='rbf', Degree=3, gamma='auto_deprecated', coef0=0.0, Shrink=True, onprobability=Fal = 0.001、cache_size=200、class_weight=None、verbose=False、max_iter=-1、Decision_function_shape='ovr'、random_state=None)导入 numpy as npX = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])y = np .array([1, 1, 2, 2]) from sklearn.svm import SVCclf = SVC(C=1,kernel='rbf',gamma='auto')clf.fit(X, y) print(clf. Predict([[-0.8, -1]]))X = [[0], [1], [2], [3]]Y = [0, 1, 2, 3]clf = svm.SVC(gamma='scale', Decision_function_shape='ovo' )clf.fit(X, Y) dec = clf.decision_function([[1]])dec.shape[1] # 4 个类: 4*3/2 = 6clf.decision_function_shape = "ovr"dec = clf.decision_function( [[1]])dec.shape[1] # 4类class sklearn.tree.DecisionTreeClassifier(criterion='gini', splitter='best', max_depth=None, min_samples_split=2, min_samples_neaf_feature=feature., random_state=None, max_leaf_nodes= None , min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)From sklearn.datasets import load_irisfrom sklearn.model_selection Import cross_val_scorefrom sklearn.tree importdecisiontreeclassifierclf = bagttreeclassifier (random_state = 0) (iris.data) clf.predict_proba(iris.data) 、KNN、SVM、 决策树算法 ..同时还使用python sklearn接口演示了各个算法的用例。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网