在sklearn.datasets包中内嵌了一些小型数据集。
通用的dataset API
- The dataset loaders: 加载小型数据
- The dataset fetchers:下载和加载大型数据集
- The dataset generation functions:生成受控的合成数据集
loaders和fetchers都返回至少有两项的sklearn.utils.Bunch对象(就是一个字典):一个大小是n_samples * n_features并且带有标签data的数组,和一个长度是n_samples并且带有标签target的数组。但是如果将参数return_X_y设置成True,则返回的就只是包含X和y的元组,不带标签。
load_
以上函数可以用来加载一些数据集,但是规模比较小。
fetch_
fetch_获得的数据都是来源于实际生活中的数据。数据量相对来说比较大。
生成数据集
scikit-learn包含很多随机样本生成器,可以利用他们来构建大小和复杂度受控的数据集。这些生成器产生一个特征矩阵和相应的离散目标值。
Single label
make_blobs和make_classification:通过为每个类分配一个或多个正态分布的点集群来创建多类数据集。
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=10, centers=3, n_features=2, random_state=0)
##n_samples表示生成的样本的总个数,或者是向量表示每个种类各有多少样本
##n_features表示样本中的特征数量
##centers表示生成的样本中心的个数,如果n_samples是整数,并且centers是默认值,则生成3个中心,
##random_state类似生成数据的随机数种子
X, y = make_blobs(n_samples=[3, 3, 4], centers=None, n_features=2, random_state=0)
''''''
'''
创建关于边长为2*class_sep的n_info -dimensional维超立方体顶点的正态分布
(std=1)点集群,并为每个类分配相同数量的集群。它引入了这些特性之间的相互依赖性,
并给数据添加了各种类型的进一步干扰。
不打乱顺序时,X顺序如下:
X[:, :n_informative + n_redundant + n_repeated].
make_classification专门通过以下方式引入噪声:相关的、冗余的和无信息的特征;每类多个高斯聚类;以及特征空间的线性变换。
'''
make_gaussian_quantiles:这个分类数据集是通过采用多维标准正态分布和定义由嵌套的同心多维球体分隔的类来构造的,这样每个类中的样本数(分布的分位数)大致相同。
make_circles:在二维平面中做一个包围小圆的大圆。
'''该例说明Kernal PCA可以找到一个使数据线性可分的数据投影'''
print(__doc__) ##输出开头注释的内容
import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA, KernelPCA
from sklearn.datasets import make_circles
np.random.seed(0) #设置随机数种子
X, y = make_circles(n_samples=400, factor=.3, noise=.05)
#factor是内圆和外圆之间的比例因子
#noise是加到数据上的高斯噪声的标准差
kpca = KernelPCA(kernel='rbf', fit_inverse_transform=True, gamma=10)
#kernel表示核函数的类型
#gamma是rbf核系数
#fit_inverse_transform表示是否学会找一个像的原像
X_kpca = kpca.fit_transform(X)##训练并对X做pca
X_back = kpca.inverse_transform(X_kpca)##逆变换
pca = PCA()
X_pca = pca.fit_transform(X)
plt.figure()
plt.subplot(2, 2, 1, aspect='equal')
plt.title('Original space')
reds = y == 0
blues = y == 1
plt.scatter(X[reds, 0], X[reds, 1], c='red', s=20, edgecolor='k')
plt.scatter(X[blues, 0], X[blues, 1], c='blue', s=20, edgecolor='k')
plt.xlabel('$x_1$')
plt.ylabel('$x_2$')
X1, X2 = np.meshgrid(np.linspace(-1.5, 1.5, 50), np.linspace(-1.5, 1.5, 50))
X_grid = np.array([np.ravel(X1), np.ravel(X2)]).T
Z_grid = kpca.transform(X_grid)[:, 0].reshape(X1.shape)
plt.contour(X1, X2, Z_grid, colors='grey', linewidths=1, origin='lower')
plt.subplot(2, 2, 2, aspect='equal')
plt.scatter(X_pca[reds, 0], X_pca[reds, 1], c="red",
s=20, edgecolor='k')
plt.scatter(X_pca[blues, 0], X_pca[blues, 1], c="blue",
s=20, edgecolor='k')
plt.title("Projection by PCA")
plt.xlabel("1st principal component")
plt.ylabel("2nd component")
plt.subplot(2, 2, 3, aspect='equal')
plt.scatter(X_kpca[reds, 0], X_kpca[reds, 1], c="red",
s=20, edgecolor='k')
plt.scatter(X_kpca[blues, 0], X_kpca[blues, 1], c="blue",
s=20, edgecolor='k')
plt.title("Projection by KPCA")
plt.xlabel(r"1st principal component in space induced by $\phi$")
plt.ylabel("2nd component")
plt.subplot(2, 2, 4, aspect='equal')
plt.scatter(X_back[reds, 0], X_back[reds, 1], c="red",
s=20, edgecolor='k')
plt.scatter(X_back[blues, 0], X_back[blues, 1], c="blue",
s=20, edgecolor='k')
plt.title("Original space after inverse transform")
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")
plt.tight_layout()
plt.show()
make_moons:做两个交叉的半圆
加载其他数据集
加载Scikit-learn中的图片
load_sample_images() ##加载用于图像处理的图片们
load_sample_image(image_name)#加载单一图片样本的numpy数组
加载svmlight/libsvm格式的数据
from sklearn.datasets import load_svmlight_file
X_train, y_train = load_svmlight_file(file name)