(一)集成学习上——机器学习三大任务

参考:DataWhale教程链接

集成学习(上)所有Task:

(一)集成学习上——机器学习三大任务

(二)集成学习上——回归模型

(三)集成学习上——偏差与方差

(四)集成学习上——回归模型评估与超参数调优

(五)集成学习上——分类模型

(六)集成学习上——分类模型评估与超参数调优

(七)集成学习中——投票法

(八)集成学习中——bagging

(九)集成学习中——Boosting简介&AdaBoost

(十)集成学习中——GBDT

(十一)集成学习中——XgBoost、LightGBM

(十二)集成学习(下)——Blending

(十三)集成学习(下)——Stacking

(十四)集成学习(下)——幸福感预测

(十五)集成学习(下)——蒸汽量预测

1.导论

关于什么是机器学习,有监督学习、无监督学习、回归、分类的解释,参考众多,不再赘述。

参考1:DataWhale教程链接

参考2:DataWhale好文,机器学习的通俗讲解! 也有非常棒的讲解。

在学习机器学习中,我们经常使用scikit-learn简称sklearn工具库来探索机器学习项目,下面我们开始使用sklearn来演示这几个具体的概念:

# 引入相关科学计算包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline 
plt.style.use("ggplot")      # 样式美化
import seaborn as sns

# 设置在jupyter中打印所有输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

1.1 有监督学习

1.1.1 回归

我们用sklearn内置数据集Boston房价数据集来看一下。
sklearn中所有内置数据集都封装在datasets对象内,返回的对象有:

  • data:特征X的矩阵(ndarray)
  • target:因变量的向量(ndarray)
  • feature_names:特征名称(ndarray)

返回的对象均为ndarray,需要自己把它转换为dataframe。

from sklearn import datasets
boston = datasets.load_boston()     # 返回一个类似于字典的类
X = boston.data
y = boston.target
X.shape
y.shape
features = boston.feature_names
features
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
boston_data.head()
(506, 13)
(506,)
array(['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD',
       'TAX', 'PTRATIO', 'B', 'LSTAT'], dtype='<U7')
CRIMZNINDUSCHASNOXRMAGEDISRADTAXPTRATIOBLSTATPrice
00.0063218.02.310.00.5386.57565.24.09001.0296.015.3396.904.9824.0
10.027310.07.070.00.4696.42178.94.96712.0242.017.8396.909.1421.6
20.027290.07.070.00.4697.18561.14.96712.0242.017.8392.834.0334.7
30.032370.02.180.00.4586.99845.86.06223.0222.018.7394.632.9433.4
40.069050.02.180.00.4587.14754.26.06223.0222.018.7396.905.3336.2
sns.scatterplot(boston_data['NOX'],boston_data['Price'],color="r",alpha=0.6)# alpha 点的透明度,0透明度最高,1透明度最低。
plt.title("Price~NOX")
plt.show()

在这里插入图片描述

sns.scatterplot(boston_data['RM'],boston_data['Price'],color="r",alpha=0.6)# alpha 点的透明度,0透明度最高,1透明度最低。
plt.title("Price~RM")
plt.show()

在这里插入图片描述

我们可以从图上比较轻松的看出,特征NOX呈弱负相关,RM呈强正相关。
数据给定任务所需要的因变量,因变量为波士顿房价,Price是一个连续型变量,所以波士顿数据集为典型的回归模型数据集

各个特征的相关解释:

  • CRIM:各城镇的人均犯罪率
  • ZN:规划地段超过25,000平方英尺的住宅用地比例
  • INDUS:城镇非零售商业用地比例
  • CHAS:是否在查尔斯河边(=1是)
  • NOX:一氧化氮浓度(/千万分之一)
  • RM:每个住宅的平均房间数
  • AGE:1940年以前建造的自住房屋的比例
  • DIS:到波士顿五个就业中心的加权距离
  • RAD:放射状公路的可达性指数
  • TAX:全部价值的房产税率(每1万美元)
  • PTRATIO:按城镇分配的学生与教师比例
  • B:1000(Bk - 0.63)^2其中Bk是每个城镇的黑人比例
  • LSTAT:较低地位人口
  • Price:房价

1.1.2 分类

我们再来看一个典型的分类模型数据集——鸢尾花iris数据集。

from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
X.shape
y.shape
features = iris.feature_names
features
iris_data = pd.DataFrame(X,columns=features)
iris_data['target'] = y
iris_data.head()
y[:5]
(150, 4)
(150,)
['sepal length (cm)',
 'sepal width (cm)',
 'petal length (cm)',
 'petal width (cm)']
sepal length (cm)sepal width (cm)petal length (cm)petal width (cm)target
05.13.51.40.20
14.93.01.40.20
24.73.21.30.20
34.63.11.50.20
45.03.61.40.20
array([0, 0, 0, 0, 0])
np.unique(y)
for index,c in enumerate(np.unique(y)):
    print(index,c)
array([0, 1, 2])
0 0
1 1
2 2
# 可视化特征
marker = ['s','x','o']
for index,c in enumerate(np.unique(y)):
    plt.scatter(x=iris_data.loc[y==c,"sepal length (cm)"],y=iris_data.loc[y==c,"sepal width (cm)"],alpha=0.8,label=c,marker=marker[c])
plt.xlabel("sepal length (cm)")
plt.ylabel("sepal width (cm)")
plt.legend()
plt.show()

在这里插入图片描述
我们可以看到:每种不同的颜色和点的样式为一种类型的鸢尾花,数据集有三种不同类型的鸢尾花。因此因变量是一个类别变量,因此通过特征预测鸢尾花类别的问题是一个分类问题

各个特征的相关解释:

  • sepal length (cm):花萼长度(厘米)

  • sepal width (cm):花萼宽度(厘米)

  • petal length (cm):花瓣长度(厘米)

  • petal width (cm):花瓣宽度(厘米)

附1:sklearn自带的数据集

数据集大小数据集名称方法适用算法
小数据集波士顿房价数据集load_boston([return_X_y])回归
小数据集鸢尾花数据集load_iris([return_X_y])分类
小数据集糖尿病数据集load_diabetes([return_X_y])回归
小数据集手写数字数据集load_digits([n_class, return_X_y])分类
小数据集亚麻布数据集load_linnerud([return_X_y])多项式回归
小数据集红酒数据集load_wine([return_X_y])分类
小数据集乳腺癌数据集load_breast_cancer([return_X_y])分类
大数据集olivetti脸部图像数据集fetch_olivetti_faces()降维
大数据集新闻分类数据集fetch_20newsgroups()分类
大数据集带标签的人脸数据集fetch_lfw_people()分类;降维
大数据集路透社新闻语料数据集fetch_rcv1()分类

附2:利用sklearn.datasets.make_classification 生成分类算法数据

sklearn.datasets.make_classification(n_samples=100, n_features=20, *, n_informative=2, n_redundant=2, n_repeated=0, n_classes=2, n_clusters_per_class=2, weights=None, flip_y=0.01, class_sep=1.0, hypercube=True, shift=0.0, scale=1.0, shuffle=True, random_state=None)

入参:

  • n_features : 特征个数,= n_informative + n_redundant + n_repeated + (n_features-n_informative-n_redundant-n_repeated)个随机抽取的重复无用特征。
  • n_informative:多信息特征的个数
  • n_redundant:冗余信息,informative特征的随机线性组合
  • n_repeated :重复信息,随机提取n_informative和n_redundant 特征
  • n_classes:分类类别
  • clusters_per_class :某一个类别是由几个cluster构成的

出参:

  • X,[n_samples, n_features]形状的数组,代表产生的样本
  • y,[n_samples]形状的数组,代表每个点的标签(类别)
x, y = datasets.make_classification(n_samples=1000,n_features=2, n_redundant=0, n_informative=2,
                             n_clusters_per_class=2)
for index,c in enumerate(np.unique(y)):
    plt.scatter(x[y==c, 0], x[y==c, 1],s=7)
plt.show()

在这里插入图片描述

1.2 无监督学习

我们可以使用sklearn生成符合自身需求的数据集,下面我们用其中几个函数例子来生成无因变量的数据集:
https://scikit-learn.org/stable/modules/classes.html?highlight=datasets#module-sklearn.datasets
在这里插入图片描述

1.2.1 利用sklearn.datasets.make_blobs 生成聚类算法数据

sklearn.datasets.make_blobs(n_samples=100, n_features=2, *, centers=None, cluster_std=1.0, center_box=-10.0, 10.0, shuffle=True, random_state=None, return_centers=False)

入参:

  • n_samples 样本数,表示产生多少个数据
  • n_features 特征数,表示数据是几维
  • centers 表示数据点中心,可以输入int数字,代表有多少个中心,也可以输入几个坐标(fixed center locations)
  • cluster_std 表示分布的标准差

出参:

  • X,[n_samples, n_features]形状的数组,代表产生的样本
  • y,[n_samples]形状的数组,代表每个点的标签(类别)
# 生成符合正态分布的聚类数据
from sklearn import datasets
x, y = datasets.make_blobs(n_samples=2000, n_features=2, centers=3)
for index,c in enumerate(np.unique(y)):
    plt.scatter(x[y==c, 0], x[y==c, 1],s=7)
plt.show()

在这里插入图片描述

1.2.2 利用sklearn.datasets.make_moons 生成聚类算法数据 (月牙形)

sklearn.datasets.make_moons(n_samples=100, *, shuffle=True, noise=None, random_state=None)

入参:

  • n_samples 样本数,表示产生多少个数据
  • noise 加在数据上的高斯噪声的标准差
# 生成月牙型非凸集
from sklearn import datasets
x, y = datasets.make_moons(n_samples=2000, shuffle=True,
                  noise=0.05, random_state=None)
for index,c in enumerate(np.unique(y)):
    plt.scatter(x[y==c,0],x[y==c,1],s=7)
plt.show()

在这里插入图片描述

1.2.3 利用sklearn.datasets.make_circles 生成聚类算法数据 (环形)

sklearn.datasets.make_circles(n_samples=100, *, shuffle=True, noise=None, random_state=None, factor=0.8)

入参:

  • n_samples 样本数,表示产生多少个数据
  • noise 加在数据上的高斯噪声的标准差
  • factor 内外圆之间的比例因子,介于[0,1]
from sklearn import datasets
x, y = datasets.make_circles(n_samples=2000, shuffle=True,
                  noise=0.05, random_state=None,factor=0.3)
for index,c in enumerate(np.unique(y)):
    plt.scatter(x[y==c,0],x[y==c,1],s=7)
plt.show()

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值