赞
踩
集成学习(上)所有Task:
关于什么是机器学习,有监督学习、无监督学习、回归、分类的解释,参考众多,不再赘述。
参考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"
我们用sklearn内置数据集Boston房价数据集来看一下。
sklearn中所有内置数据集都封装在datasets对象内,返回的对象有:
返回的对象均为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')
CRIM | ZN | INDUS | CHAS | NOX | RM | AGE | DIS | RAD | TAX | PTRATIO | B | LSTAT | Price | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.00632 | 18.0 | 2.31 | 0.0 | 0.538 | 6.575 | 65.2 | 4.0900 | 1.0 | 296.0 | 15.3 | 396.90 | 4.98 | 24.0 |
1 | 0.02731 | 0.0 | 7.07 | 0.0 | 0.469 | 6.421 | 78.9 | 4.9671 | 2.0 | 242.0 | 17.8 | 396.90 | 9.14 | 21.6 |
2 | 0.02729 | 0.0 | 7.07 | 0.0 | 0.469 | 7.185 | 61.1 | 4.9671 | 2.0 | 242.0 | 17.8 | 392.83 | 4.03 | 34.7 |
3 | 0.03237 | 0.0 | 2.18 | 0.0 | 0.458 | 6.998 | 45.8 | 6.0622 | 3.0 | 222.0 | 18.7 | 394.63 | 2.94 | 33.4 |
4 | 0.06905 | 0.0 | 2.18 | 0.0 | 0.458 | 7.147 | 54.2 | 6.0622 | 3.0 | 222.0 | 18.7 | 396.90 | 5.33 | 36.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是一个连续型变量,所以波士顿数据集为典型的回归模型数据集。
各个特征的相关解释:
我们再来看一个典型的分类模型数据集——鸢尾花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 | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | 0 |
1 | 4.9 | 3.0 | 1.4 | 0.2 | 0 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | 0 |
3 | 4.6 | 3.1 | 1.5 | 0.2 | 0 |
4 | 5.0 | 3.6 | 1.4 | 0.2 | 0 |
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):花瓣宽度(厘米)
数据集大小 | 数据集名称 | 方法 | 适用算法 |
---|---|---|---|
小数据集 | 波士顿房价数据集 | 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() | 分类 |
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)
入参:
出参:
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()
我们可以使用sklearn生成符合自身需求的数据集,下面我们用其中几个函数例子来生成无因变量的数据集:
https://scikit-learn.org/stable/modules/classes.html?highlight=datasets#module-sklearn.datasets
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)
入参:
出参:
# 生成符合正态分布的聚类数据
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()
sklearn.datasets.make_moons(n_samples=100, *, shuffle=True, noise=None, random_state=None)
入参:
# 生成月牙型非凸集
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()
sklearn.datasets.make_circles(n_samples=100, *, shuffle=True, noise=None, random_state=None, factor=0.8)
入参:
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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。