- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 。
在上一节中,我们已经完成了对所有经过均衡和清洗的菜品数据的准备工作。接下来,我们将考虑使用多种算法,也就是不同的分类器,来构建模型。我们将利用这个数据集和各种分类器,基于一组特定的配料,预测这些菜品属于哪个国家的美食.
在这一过程中,你将深入学习如何评估和权衡不同分类算法的优缺点,以及如何选择最适合当前任务的模型.
Scikit-learn 将分类任务归类为监督学习的一部分,其中包含了多种可用于分类的算法和方法。初看之下,这些选择似乎让人眼花缭乱。以下是一些可用于分类的主要算法:
与其进行无目的的猜测,不如下载这份详尽的机器学习速查表——微软原版本的小抄表。该速查表对各种算法进行了系统的比较和总结,能够有效地指导我们在选择适合的分类算法时做出明智的决策。根据这份速查表,我们可以针对本章节中涉及的多种分类任务,考虑以下几种算法选择:
以下是我自己翻译后的中文版本,希望可以帮助大家,如图所示:
首先,我们的预测值是固定的,并且涉及多类分类的问题,因此我们可以聚焦于多类分类模型的选择。接下来,我们将逐个分析适合的算法.
神经网络(Neural Network)虽然强大,但在这个特定任务中显得过于复杂。我们的数据量较小且相对清晰.
我们可以考虑决策树和逻辑回归这两种算法。决策树是一种直观且易于解释的模型,适用于处理多类分类问题。它能够自动选择重要特征并进行数据分割,直观地展示决策过程。然而,逻辑回归也是一个非常实用的选择,尤其是在处理多类型数据时,它能够有效地建立类间的线性关系.
尽管增强决策树在某些场景中非常有效,但它更适合用于非参数化的任务,尤其是在需要进行排序或集成多种模型时。而对于我们当前的任务,增强决策树并不能提供直接的帮助.
综合考虑这些因素,我们决定选择逻辑回归作为我们的模型构建方法.
因为我们对 Scikit-learn 库已经相对熟悉,今天,我们将主要分析 LogisticRegression 这一方法的参数设置,因为不同的参数配置会直接影响底层算法的运作机制。通过对这些参数的深入理解,我们能够更好地优化模型,以实现更高的分类准确率.
当我们使用 Scikit-learn 进行逻辑回归运算时,两个至关重要的参数是 multi_class 和 solver,它们对于模型的性能和适用性有着直接的影响,因此需要特别关注和详细说明.
参数 | 描述 | 可选值 | 备注 |
---|---|---|---|
multi_class |
指定分类方式。 | - ovr (一对多) - multinomial (多项式) |
- ovr 是默认选项,适用于二分类和多分类 - multinomial 适用于多分类且通常需要softmax输出。 |
solver |
优化算法选择,用于求解逻辑回归模型的权重。 | - liblinear - newton-cg - lbfgs - sag - saga |
- liblinear 仅适用于 ovr - newton-cg 、lbfgs 、sag 、saga 可以与 multinomial 配合使用。 |
multi_class
参数:
ovr
(一对多):将多类问题转换为多个二分类问题。对于每个类别,训练一个分类器来区分该类别与其他所有类别。multinomial
(多项式):适用于多类别分类问题,使用softmax函数进行概率估计,通常在类别数量较多时效果较好。solver
参数:
liblinear
:适用于小数据集和二分类问题,支持 ovr
。newton-cg
:适用于多类别问题,支持 multinomial
。lbfgs
:适用于多类别问题,支持 multinomial
,通常在大数据集上效果较好。sag
:适用于大数据集,支持 multinomial
,加速收敛。saga
:适用于大数据集,支持 multinomial
,同时支持L1和L2正则化。liblinear
只与 ovr
兼容。newton-cg
、lbfgs
、sag
、saga
都可以与 multinomial
和 ovr
兼容。关于多项式逻辑回归,我们已经有了一定的了解,接下来让我们详细解释一下 "ovr"(一对多)是什么意思,以及它在多类分类中的作用.
"ovr" 本意为一对其余(One-vs-Rest,OvR)策略,它涉及将多类数据集拆分为多个二元分类问题。具体而言,这种方法通过将每个类别视为一个独立的二元分类任务,使得我们可以利用现有的二元分类算法来解决更复杂的多类分类问题。对于每个二元分类问题,我们都将训练一个二元分类器,并使用这些分类器中最可靠的模型进行最终预测.
例如,考虑一个多类分类问题,其中有三个类别:“red”、“blue”和“green”。在这种情况下,我们可以将这个多类分类问题拆分为以下三个二元分类数据集:
这种拆分方式使得每个分类器只需关注一个特定类别,从而简化了模型训练的过程。由于逻辑回归本身是为二元分类设计的,因此它不能直接应用于多类分类任务。然而,通过使用 OvR 策略,我们可以采用一种启发式的方法,将多类分类问题分解为多个二元分类数据集,并为每个数据集训练一个独立的二元分类模型.
经过以上分析,我们的模型选择方案可以是 "ovr"(一对其余,One-vs-Rest)或 "multinomial"(多项式)。由于逻辑回归最初是设计用于二分类任务的,因此这两个方案参数的选择都能够有效地使逻辑回归在多类分类任务中发挥出色的性能.
在我们的模型中,我们决定将 multi_class 参数设置为 "ovr",并选择 solver 设置为 "liblinear" 进行模型训练。选择 "liblinear" 作为求解器的原因在于它在处理小型数据集时表现出色,特别是在二元分类的场景中,能够提供快速的收敛速度和较高的准确率.
接下来我们将数据清洗下并进行测试、训练集分割.
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve
from sklearn.svm import SVC
import numpy as np
cuisines_df = pd.read_csv("../../data/cleaned_cuisines.csv")
cuisines_label_df = cuisines_df['cuisine']
X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3)
这段代码的整体结构和逻辑我们已经有了相当清晰的印象,因此在此不再详细解释其具体实现.
创建一个逻辑回归模型 。
lr = LogisticRegression(multi_class='ovr',solver='liblinear')
model = lr.fit(X_train, np.ravel(y_train))
accuracy = model.score(X_test, y_test)
Accuracy is 0.8015012510425354 。
运算完成后,我们观察到模型的准确率高达 80%! 。
接下来,我们将对本轮预测结果进行详细的检查,以评估准确率的具体来源.
test= X_test.iloc[50].values.reshape(-1, 1).T
proba = model.predict_proba(test)
classes = model.classes_
resultdf = pd.DataFrame(data=proba, columns=classes)
topPrediction = resultdf.T.sort_values(by=[0], ascending = [False])
topPrediction.head()
运行后的输出如下——可以看到,根据模型的预测结果,这道菜被识别为日本菜的可能性最大.
japanese 0.935524 indian 0.040175 korean 0.016106 thai 0.005825 chinese 0.002370 。
与你在之前的回归章节中所进行的分析类似,我们同样可以通过生成分类报告来获取关于模型的更多详细信息.
y_pred = model.predict(X_test)
print(classification_report(y_test,y_pred))
详细报告如下:
precision recall f1-score support
chinese 0.73 0.71 0.72 238
indian 0.92 0.87 0.89 243
japanese 0.79 0.79 0.79 237
korean 0.84 0.81 0.82 236
thai 0.75 0.84 0.79 245
accuracy 0.80 1199
macro avg 0.80 0.80 0.80 1199
weighted avg 0.80 0.80 0.80 1199
至此,本模型的构建过程已圆满完成! 。
尽管我们今天对数据的解析仍然采用了之前熟悉的方法,但我们在此基础上新增了两个重要的知识点。首先,我们深入探讨了分类器的选择,分析了不同分类器在特定任务中的适用性与表现。这不仅帮助我们更好地理解各类算法的优势与局限性,也为未来的模型选择提供了理论支持.
其次,我们详细解析了逻辑回归中的参数设置,特别是对“ovr”(一对多)策略进行了深入学习。通过对这一策略的理解,我们能够更清楚地掌握如何在多类分类问题中有效地应用逻辑回归,提高模型的准确性与泛化能力.
接下来我们将继续深入学习各种分类器的特性与应用以提升整体的分类性能.
我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者.
💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助.
🌟 欢迎关注努力的小雨!🌟 。
最后此篇关于从零开始学机器学习——初探分类器的文章就讲到这里了,如果你想了解更多关于从零开始学机器学习——初探分类器的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
PyCaret是一个开源、低代码Python机器学习库,能够自动化机器学习工作流程。它是一个端到端的机器学习和模型管理工具,极大地加快了实验周期,提高了工作效率。PyCaret本质上是围绕几个机器学习
在我的研究进展中,我现在已经将寄生虫从图像中分离出来。寄生虫看起来像蠕虫。我希望 MATLAB 读取所有输入图像,查找类似深紫色图像的蠕虫,如果检测到,则给出检测到的答复。我尝试使用直方图比较,但我认
目前我正在尝试了解机器学习算法的工作方式,但我没有真正了解的一件事是预测标签的计算准确度与视觉混淆矩阵之间的明显差异。我会尽量解释清楚。 这是数据集的片段(这里你可以看到 9 个样本(在真实数据集中大
第一章 绪论 机器学习 : 致力于研究如何通过计算的手段,利用经验来改善系统自身的性能。在计算机系统中, “经验” 通常以“数据“形式存在,因此,机器学习所研究的主要内容,是关于在计算
1. 算法原理(K-Nearest Neighbor) 本质是通过距离判断两个样本是否相似,如果距离够近就认为他们足够相似属于同一类别 找到离其最近的 k 个样本,并将这些样本称
前言 K-means是一种经典的无监督学习算法,用于对数据进行聚类。K-means算法将数据集视为具有n个特征的n维空间,并尝试通过最小化簇内平方误差的总和来将数据点划分为簇。本文将介绍K-m
目录 前言 介绍LightGBM LightGBM的背景和起源 L
前言 可以说掌握了机器学习,你就具备了与机器对话,充分利用机器为人类服务的能力。在人工智能时代,这将成为一项必备技能,就好比十年前你是编程大牛,二十年前你英语超好一样。因此,无论你是什么专业的
几个贯穿始终的概念 当我们把人类学习简单事物的过程抽象为几个阶段,再将这些阶段通过不同的方法具体化为代码,依靠通过计算机的基础能力-- 计算 。我们就可以让机器能够“学会”一些简单的事物。
1、选题背景 人脸识别技术是模式识别和计算机视觉领域最富挑战性的研究课题之一,也是近年来的研究热点,人脸性别识别作为人脸识别技术
每当我们在公有云或者私有云发布训练好的大数据模型,为了方便大家辨识、理解和运用,参照huggingface所制定的标准制作一个Model Card展示页,是种非常好的模型展示和组织形式。 下面就是一
2. 支持向量机 对偶优化 拉格朗日乘数法可用于解决带条件优化问题,其基本形式为: \[\begin{gather} \min_w f(w),\\ \mathrm{s.t.} \quad
我正在尝试运行以下代码: https://github.com/opencv/opencv/blob/master/samples/dnn/classification.cpp 我在这里找到所有经过预
我是机器学习新手。当我使用 scikit-learn 模块中的波士顿数据集练习具有默认参数的决策树回归模型时。 在此链接解决方案( How to Build a Decision tree Regre
我有用于训练的数据。当我将其输入神经网络时,该数据出现 3% 的错误。 我知道这些数据有一定的过度代表性 - 例如,第 5 类的示例大约是其他类的十分之一。 我的作业指出,我可以通过偏置训练数据(即删
我在 Python 的多类分类中使用 SVM 时遇到问题。事实上,问题在于性别分类(来自图像),其中训练数据集仅包含“y=1”或“ y=-1”作为类标签(二进制)。但是,在预测中,如果是男性,我必须预
以防万一你们不知道,对抗性图像是属于某个类别的图像,但随后被扭曲,而人眼没有任何视觉感知差异,但网络错误地将其识别为完全不同的类别。 有关此内容的更多信息,请参见此处: http://karpathy
我正在进行一个 ML 语言识别项目 (Python),该项目需要具有高维特征输入的多类分类模型。 目前,我所能做的就是通过反复试验来提高准确性。无意识地结合可用的特征提取算法和可用的机器学习模型,看看
import numpy as np def sigmoid(x): return 1.0/(1+np.asmatrix(np.exp(-x))) def graD(X,y,alpha,s0,
所以我有多个列表: ['disney','england','france'] ['disney','japan'] ['england', 'london'] ['disney', 'france'
我是一名优秀的程序员,十分优秀!