一、机器学习算法分类:
机器学习算法可分为两大类,即分类与回归。其中分类是针对离散型数据,比如判定一直动物是猫是狗,判断一个人的信用等级;而回归问题为针对连续型数据,如预测淘宝店铺销量,预测明天气温等。不同的问题对应不同的算法,其总结如下:
分类的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:为目标值的具体数据
估计器的工作流程:
- 首先将数据集划分为训练集、测试集
三、具体算法
(一)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