200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 机器学习中一个不需要什么数学基础的算法 非常适合入门

机器学习中一个不需要什么数学基础的算法 非常适合入门

时间:2024-07-21 01:08:57

相关推荐

机器学习中一个不需要什么数学基础的算法 非常适合入门

今天主要讲一个最适合机器学习入门的算法——KNN(K-Nearest Neighbor)算法(也叫K近邻算法)以及模型评估方面的内容。

KNN算法

该算法的原理非常直观:要想预测一个新数据,只需把它放到训练数据集中(“旧数据”),看它离哪些数据近,就把它预测为这些数据的类别(分类);或者把它预测为这些数据的均值(回归)。所以k近邻算法既可以做分类,又可以做回归。

Python的scikit-learn库中自带了很多公开的数据集,这里用乳腺癌数据集来说明k近邻算法。

首先,加载该数据集

from sklearn.datasets import load_breast_cancer

然后,把该数据集分成两部分。一部分用来训练我们的模型,另一部分用来测试模型的精度。

cancer_data = load_breast_cancer()from sklearn.model_selection import train_test_splitX_train,X_test,y_train,y_test = train_test_split(cancer_data.data,cancer_data.target)

其中,train_test_split可以将数据按25%的比例分成训练集和测试集。X_train、y_train为训练样本和标签,占75%;X_test、y_test为测试样本和标签,占比25%。

接着,加载我们的模型

from sklearn.neighbors import KNeighborsClassifiermodel = KNeighborsClassifier(n_neighbors=3)

这里的n_neighbors和k的含义一样,都是指邻居的个数。也就是说,我们要找到最近的3个邻居,来对预测做出判断。

然后,把数据“喂”给我们的模型,让模型得到训练。

model.fit(X_train,y_train)

训练完成后,我们测试一下模型的精度

model.score(X_test,y_test)0.916083916083916

也就是说,模型的精度达到了91.6%。

这就是第一个机器学习算法以及它实现的过程,怎么样,是不是有点cool?

模型的泛化能力

我们用数据训练模型的目的,就是希望它在未知的新数据集中有很好的表现,我们把这种能力就叫做泛化。

我们总是希望泛化精度尽可能高,但有时候,你对旧数据进行过度训练,模型在训练集中表现的非常好,以至于将一些无关的噪声点都拟合了进来。

这时,模型的泛化能力反而会降低,我们称之为过拟合。

与此同时,假如你没有对数据进行有效的训练,产生的模型也比较粗糙,那么对于新的数据集,模型同样不会有好的结果。我们称之为欠拟合。

在模型训练过程中,既不能训练过少,也不能过度训练。过拟合和欠拟合都是需要我们避免的。

KNN模型重要参数

k近邻算法主要有2个参数。

其一就是邻居的个数k。邻居过少,只会预测与新数据最近的那个样本;邻居过多,会预测所有数据的平均,算法失去意义。

其二是新数据与旧样本之间的距离。我们一般用欧式距离,或者叫L2范数。

KNN模型的优缺点

优点:模型易于理解,不需要什么数学基础。参数也不多,调参很容易。

缺点:如果训练数据的特征很多,而且样本也很大,那么k近邻算法的预测速度和精度都会有大幅下降。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。