从sklearn开始机器学习 1基本介绍和数据集操作
原创文章,转载请注明出处。
根据一个知乎大佬的答疑,决定机器学习的方式侧重于,从实战入手,哪个数学理论实在是太顶了,孩子顶不住,准备从Kaggle入手进行学习,等我熟悉了一些实战使用一丁点简单的模型之后再尝试熟悉理论,总之还得是理论与实践结合的。
入门当然是经典的泰坦尼克号啦,(虽然我也不知道为什么经典)开冲!!!
首先把一堆网址贴上
1.kaggle的泰坦尼克号 (挑了一个看起来比较经典的解) 全英文看起来有点不适
3.sklearn的中文社区 (好在有中文平替,以我的英文水平着实有点难受)
下面就开始我们的学习之旅。
在sklearn有中有六大任务模块:分别是分类、回归、聚类、降维、模型选择和预处理。
其中分类和回归是监督学习,聚类和降维是无监督学习
- 常用的回归:线性、决策树、SVM、KNN ;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
- 常用的分类:线性、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
- 常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN
- 常用降维:LinearDiscriminantAnalysis、PCA
加载数据集
sklearn还自带一些数据集,属于一些比较经典的数据集。
常见数据集如下:
模块 | 数据集 | 大小 |
---|---|---|
load_iris() | 鸢尾花数据集 | 150*4 |
load_boston() | 波士顿房价数据 | 506*13 |
load_wine() | 葡萄酒数据集 | 178*13 |
load_digits() | 手写体数字光学识别数据集 | 1797*64 |
load_breast_cancer() | 乳腺癌数据集 | 569*30 |
load_diabetes() | 糖尿病数据集 | 442*10 |
load_linnerud() | 体能训练 | 20*3 |
load_sample_images() | 图像数据集(2个图像:中国和花朵) | 427*640*3 |
除此之外还可以在线下载,生成,以及购买的。
- 自带的小数据集(packaged dataset):sklearn.datasets.load_
- 可在线下载的数据集(Downloaded Dataset):sklearn.datasets.fetch_
- 计算机生成的数据集(Generated Dataset):sklearn.datasets.make_
- svmlight/libsvm格式的数据集:sklearn.datasets.load_svmlight_file(…)
- 从买了data.org在线下载获取的数据集:sklearn.datasets.fetch_mldata(…)
使用示例:
1 |
|
加载后的数据集可以视为一个字典,几乎所有的 Sklearn 数据集均可以使用 data、target、feature_names、DESCR 分别获取数据集的数据、标签、特征名称和描述信息。
划分数据集
此处总结参考了此博客(很详细)。
Sklearn 的 model selection 模块提供了 train_test_spilt 函数,能够对数据集进行拆分,其使用格式如下:
1 |
|
参数名称 | 说明 |
---|---|
arrays | 接收一个或多个数据集。代表需要划分的数据集,若为分类、回归则分别传入数据和标签,若为聚类则传入数据。无默认。 |
train_size | 接收float、int、None类型的数据。代表训练集的大小。该参数与test_size可以只传入一个。 |
test_size | 接收float、int、None类型的数据。代表测试集的大小。该参数与train_size可以只传入一个。如果传入的数据为float类型则需要限定在0-1之间,代表测试集在总数中的占比;如果传入为int类型的数据,则表示测试集记录的绝对数目。 |
random_size | 接收int。代表随机种子编号,相同随机种子编号产生相同的随机结果,不同的随机种子编号产生不同的随机结果。默认为None。 |
shuffle | 接收boolean。代表是否进行有放回抽样。若该参数取值为True则stratify参数必须不能为空。 |
stratify | 接收array或者None。如果不为None,则使用传入的标签进行分层抽样。 |
将数据集划分训练集和测试集,典型的划分方式是训练集占总样本的80%,测试集占总样本的20%:
- 训练集 train set:用于训练模型
- 验证集 validation set:用于训练过程中模型性能评估
- 测试集 test set:用于检验最终的模型的性能
train_test_spilt 函数根据传入的数据,分别将传入的数据划分训练集和测试集。如果传入的是1组数据,那么生成的就是这一组数据随机划分后的训练集和测试集,总共2组。如果传入的是2组数据,则生成的训练集和测试集分别2组,总共4组。train_test_spilt 是最常用的数据划分方法,在 model_selection 模块中还提供了其他数据集划分的函数,如 PredefinedSplit、ShuffleSplit 等。
1 |
|
关于X_train, X_test, y_train, y_test的解释如下:
- x_train:包括所有自变量,这些变量将用于训练模型,同样,我们已经指定测试_size=0.4,这意味着来自完整数据的60%的观察值将用于训练/拟合模型,其余40%将用于测试模型。
- y_train-这是因变量,需要此模型进行预测,其中包括针对自变量的类别标签,我们需要在训练/拟合模型时指定我们的因变量
- x_test:这是数据中剩余的40%的自变量部分,这些自变量将不会在训练阶段使用,并将用于进行预测,以测试模型的准确性。
- y_test-此数据具有测试数据的类别标签,这些标签将用于测试实际类别和预测类别之间的准确性。
- random_state:随机数种子,固定random_state后,每次构建的模型是相同的、生成的数据集是相同的、每次的拆分结果也是相同的
使用 Sklearn 转换器处理数据
在数据分析过程中,各类特征处理相关操作都需要对训练集和测试集分开操作,需要将训练集的操作规则、权重系数等应用到测试集中。如果使用 Pandas,则应用至测试集的过程相对繁琐,使用 sklearn 转化器(transformer)可以解决这一困扰。使用 Sklearn 转换器能够实现对传入的 Numpy 数组进行标准化处理、归一化处理、二值化处理、PCA 降维等操作。
函数名称 | 说明 |
---|---|
MinMaxScaler | 对特征进行离差标准化 |
StandardScaler | 对特征进行标准差标准化 |
Normalizer | 对特征进行归一化 |
Binarizer | 对定量特征进行二值化处理 |
OneHotEncoder | 对定性特征进行独热编码处理 |
FunctionTransformer | 对特征进行自定义函数变换 |
1 |
|