机器学习系列文章——算法的实现(knn,朴素贝叶斯,决策树,模型评估)

本文详细介绍了机器学习中的k近邻(KNN)、朴素贝叶斯和决策树算法的实现,包括数据集划分、模型评估和超参数调优。通过Python的sklearn库,展示了算法的代码实现,探讨了各算法的优缺点,并使用交叉验证和网格搜索优化模型性能。
摘要由CSDN通过智能技术生成

一、机器学习算法分类:

机器学习算法可分为两大类,即分类与回归。其中分类是针对离散型数据,比如判定一直动物是猫是狗,判断一个人的信用等级;而回归问题为针对连续型数据,如预测淘宝店铺销量,预测明天气温等。不同的问题对应不同的算法,其总结如下:

分类的API 回归的API
sklearn.neighbors:k近邻算法;sklearn.naive_baves:贝叶斯算法;sklearn.linear_model.LogisticRegression;sklearn.tree sklearn.linear_model.LinearRegression; sklearn.linear_model.Ridge

二、算法的实现

(一)数据集划分

在机器学习模型中,我们不可能将所有数据都用来训练,这样模型的效果得不到验证。所以我们会将数据划分为训练集和测试集,训练集和测试集划分的比例由自己制定,通常是按照训练集:测试集 = 3:1的比例,即testsize=0.25。 其中,训练集是用来构建模型,测试数据用来检验模型是否有效。
数据集划分API:sklearn.model_selection.train_test_split

(二)skearn自带数据集获取

sklearn中自带了供我们学习参考的数据集,其API如下:
import sklearn
sklearn.datasets.load_(),主要是获取小规模数据集,数据包含在datasets里。
sklearn.datasets.fetch_
(data_home=None),主要是需要从网络上下载的大规模数据集,其中data_home为其保存数据的地址。
上面两种获取的数据都是datasets.base.Bunch(字典格式),

from sklearn.datasets import load_iris
li=load_iris()
print("加载的数据集类型为:\n",type(li))

在这里插入图片描述
返回的数据集的键包含以下内容:

键名 内容
data 特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
target 目标标签数组,是 n_samples 的一维 numpy.ndarray 数组
DESCR 数据描述
feature_names 特征名,新闻数据,手写数字、回归数据集没有
target_names 目标标签名,回归数据集没有

下面来看看iris的数据详情:

#此处代码接上文代码
print("iris的描述为:\n",li.DESCR)
print("iris的特征数据为:\n",li.data)
print("iris的目标数据为:\n",li.target)
print("iris的特征名为:\n",li.feature_names)
print("iris的目标名为:\n",li.target_names)
li.DESCR:此方法详细描述了数据集里含有的内容,可以看出一共有四个特征类型,150个数据,后面还有对每个特征的统计分析。

在这里插入图片描述
在这里插入图片描述

li.li.data:为四个特征值的具体数据,返回值为数组类型

在这里插入图片描述

li.target:为目标值的具体数据

在这里插入图片描述

估计器的工作流程:
  1. 首先将数据集划分为训练集、测试集

在这里插入图片描述

三、具体算法

(一)K近邻算法

k近邻算法是分类算法中较为简单的应用,其主要思想是计算目标值和已知点的距离,取距离最近的点为目标的分类。

在这里插入图片描述
比如要判断上图蓝色点的位置,则可依据和其他人的距离远近来判断。可以取最近的一个人,或两个人来确定。
其API为:
sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm=‘auto’)
n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
algorithm:{‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选用于计算最近邻居的算法:‘ball_tree’将会使用 BallTree,‘kd_tree’将使用 KDTree。‘auto’将尝试根据传递给fit方法的值来决定最合适的算法。 (不同实现方式影响效率)

该算法实践:
# 导入load_iris数据集
from sklearn.datasets import load_iris

# 实例化数据集
li = load_iris()
# print("iris的描述为:\n",li.DESCR)
# print("iris的特征数据为:\n",type(li.data))
# print("iris的目标数据为:\n",li.target)
# print("iris的特征名为:\n",li.feature_names)
# print("iris的目标名为:\n",li.target_names)
# 分割数据集
# 1.导入数据分割api
from s
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值