用scikit-learn生成测试数据集

转自https://www.jiqizhixin.com/articles/2018-02-05-2

分类测试问题

将看三个分类问题:blobs、moons 和 circles。

线性分类

make_blobs() 函数可被用于生成具有高斯分布的 blobs 点。你可以控制生成 blobs 的数量,生成样本的数量以及一系列其他属性。考虑到 blobs 的线性可分性质,该问题也适用于线性分类问题。

下面的例子是一个多类分类预测问题,它生成了一个具有三个 blobs 的 2D 样本数据集。每个数据有两个输入和 0、1 或 2 个类的值。

from sklearn.datasets.samples_generator import make_blobs
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_blobs(n_samples=100, centers=3, n_features=2)
# dict中定义三个key,分别是坐标和label,再通过dict创建DataFrame
df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
colors = {0:'red', 1:'blue', 2:'green'}
fig, ax = pyplot.subplots()
#groupby可以通过传入需要分组的参数实现对数据的分组
grouped = df.groupby('label')
for key, group in grouped:
   group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])
pyplot.show()

非线性分类

make_moons() 函数用于二进制分类并且将生成一个漩涡模式,或者两个 moons。你可以控制 moon 形状中的噪声量,以及要生产的样本数量。

这个测试问题适用于能够学习非线性类边界的算法。下面的例子生成了一个中等噪音的 moon 数据集。

from sklearn.datasets import make_moons
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_moons(n_samples=100, noise=0.1)
# scatter plot, dots colored by class value
df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
colors = {0:'red', 1:'blue'}
fig, ax = pyplot.subplots()
grouped = df.groupby('label')
for key, group in grouped:
   group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])
pyplot.show()

make_circles() 函数生成一个数据集落入同心圆的二进制分类问题。再一次地,与 moons 测试问题一样,你可以控制形状中的噪声量。该测试问题适用于可以学习复杂的非线性流行的算法。下面的例子中生成了一个具有一定噪音的 circles 数据集。

from sklearn.datasets import make_circles
from matplotlib import pyplot
from pandas import DataFrame
# generate 2d classification dataset
X, y = make_circles(n_samples=100, noise=0.05)
# scatter plot, dots colored by class value
df = DataFrame(dict(x=X[:,0], y=X[:,1], label=y))
colors = {0:'red', 1:'blue'}
fig, ax = pyplot.subplots()
grouped = df.groupby('label')
for key, group in grouped:
   group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])
pyplot.show()

回归测试问题

线性回归

make_regression() 函数将创建一个输入和输出具有线性关系的数据集。你可以配置样本数量,输入特征数量,噪声级别等等。该数据集适用于可以学习线性回归函数的算法。

下面的例子将生成 100 个示例,他们具有适度的噪声,都有一个输入特征和一个输出特征。

from sklearn.datasets import make_regression
from matplotlib import pyplot
# generate regression dataset
X, y = make_regression(n_samples=100, n_features=1, noise=0.1)
# plot regression dataset
pyplot.scatter(X,y)
pyplot.show()

通过这些测试集可以:

  • 比较算法。选择一个测试问题,并比较该问题的一系列算法并汇报性能。
  • 放大问题。选择一个测试问题并探索将其放大,用级数法来可视化结果,也可以探索一个特定算法模型技能和问题规模。

代码见blogcodes\sclearn_testDataset.py

你可能感兴趣的:(机器学习)