机器学习笔记(4)
对于机器学习,我们最先需要获取数据集。一般上,广告投放也是基于机器学习去分析用户对什么事务感兴趣(有时候用户在不经意间的搜索、对话等过程中会透露),然后再对其喜好的事务进行广告投放。那么这个机器学习的数据集就来自公司产品的用户生成内容(UGC)。还有的情况是公司之间通过合作或协议,开放接口进行数据分享,让两家不同的公司同时享有共同数据。所以现实生活中会出现我在 A 平台说过这个东西,在 B 平台的广告会推送相关产品。
对于初学者,很多时候我们都没法获得大厂中的数据集,但是学习机器学习,我们可以通过一些国内外的机构所开源的数据集进行操作,去了解它的核心思路。常见的数据集有:
- Kaggle https://www.kaggle.com/datasets
- UCI Machine Learning Repository https://archive.ics.uci.edu/
- Scikit learn https://scikit-learn.org/stable/datasets/toy_dataset.html
Scikit-learn 数据集
对于初学者来说,我们可以使用 scikit learn 进行学习。scikit learn 包含了许多知名的机器学习算法的实现,文档完善,易于上手,并拥有丰富的 API。
Scikit-learn 包含了以下
- Classification 归类
- Regression 回归
- Clustering 聚类
- Dimensionality reduction 降维
- Model Selection 模型选择
- Prepossessing 预处理
我们可以通过
pip install Scikit-learn |
来安装 Scikit-learn 库。
sklearn 数据集
当我们安装好之后,我们可以访问 scikit-learn 中的数据集。使用 sklearn.datasets
可以加载流行的数据集。
load_*()
*
表示需要加载的数据集,如 iris- 获取小规模的数据集,数据包含在 datasets 里
- 常用的数据集有:
load_iris()
鸢尾花数据集load_boston()
波斯顿房价
fetch_*(data_home=None)
- 获取大规模的数据集,需要从网络上下载,函数的第一个参数是 data_home,表示数据集下载的目录。默认是
~/scikit_learn_data/
- 比如说
fetch_20newsgroups(data_home=None, subset="train")
- subset 可选值为:
train
训练集,test
测试集,all
全部 选择要加载的数据集
- subset 可选值为:
- 获取大规模的数据集,需要从网络上下载,函数的第一个参数是 data_home,表示数据集下载的目录。默认是
sklearn 数据集的使用
鸢尾花数据集中,特征值有四个:花瓣、花萼的长度、宽度;目标值有三个:setosa,vericolor,virginica
调用 fetch / load 都会返回一个 Bunch (字典格式)类型数据。它的键 key 有:
- data: 特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
- target: 标签数组,是 n_samples 的一维 numpy.ndarray 数组
- DESCR: 数据描述
- feature_names: 特征名,(新闻数据、手写数字、回归数据集没有)
- target_names: 标签名
from sklearn.datasets import load_iris |
拿到的数据可不可以全部用来训练模型?不行,因为训练模型的步骤其中一项是模型评估,假设我们将所有数据都拿去训练模型了,那就没有多余的数据进行模型评估,也就没有办法知道这个模型的质量了。为此我们需要保留一部分数据用于训练,构建模型;一份后续做检验模型时用,用于评估模型是否有效。一般上保留比例为:
方式一 | 方式二 | 方式三 | |
---|---|---|---|
训练集 | 70% | 80% | 75% |
测试集 | 30% | 20% | 30% |
在 sklearn 进行划分
sklearn.model_selection.train_test_split(arrays, options*)
- x 数据集的特征值
- y 数据集的目标值
- test_size 测试集的大小,一般为 float
- random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同
- return 返回值:训练集特征值,测试集特征值,训练集目标值,测试集目标值。
from sklearn.model_selection import train_test_split |