机器学习、模式识别的目的就是从样本数据上自动建立数学模型,将模型用于新的数据以自动解决实际问题。因此,这里有两个东西是我们比较关心的,一个是模型,另外一个样本数据。现在很多文章都在讨论各种算法,大都可以归为模型的建立过程,今天,本博文讲另外一个重要组成部分,样本数据获取方法(以sklearn为工具)。
通过Sklearn获取的样本数据格式有三种形式:
①图像样本格式
②样本数据自主生成格式和svmlight加载格式
③Toy 数据集格式、现实世界使用格式和从mldata.org获取的格式
1、toy 数据集
由一些小批量经典数据集组成,无需通过网络下载,直接可以加载使用,非常方便。
API接口如下表所示:
load_boston([return_X_y]) #加载波士顿房价数据;用于回归问题
load_iris([return_X_y]) #加载iris 数据集;用于分类问题
load_diabetes([return_X_y]) #加载糖尿病数据集;用于回归问题
load_digits([n_class, return_X_y]) #加载手写字符集;用于分类问题
load_linnerud([return_X_y]) #加载linnerud 数据集;用于多元回归问题
这些数据集可用于快速验证算法性能,但是由于数据集较小,所得结论并不一定适用于现实条件。
1.1 返回数据格式对于digits数据集:
#加载数据集,显示0
from sklearn.datasets import load_digits
digits = load_digits()
data=digits.data
import matplotlib.pyplot as plt
#plt.gray()
#plt.imshow(digits.images[0])
plt.matshow(digits.images[0])
plt.show()
2、图像样本数据集2.1 示例代码
from sklearn.datasets import load_sample_image
img=load_sample_image('flower.jpg')
import matplotlib.pyplot as plt
plt.imshow(img)
plt.show()
1、make_blobs
import sklearn.datasets
import matplotlib.pyplot as plt
X1, Y1=sklearn.datasets.make_blobs(n_samples=100, n_features=2,centers=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1)
plt.show()
(聚类模型随机数据)
2、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)
(分类模型随机数据)
random_state : 确定每次生成的数据都一致
这里我们用make_classification生成三元分类模型数据。几个关键参数有n_samples(生成样本数), n_features(样本特征数), n_redundant(冗余特征数)和n_classes(输出的类别数),例子代码如下:
#coding:utf-8
import sklearn.datasets
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
# X1为样本特征,Y1为样本类别输出, 共400个样本,每个样本2个特征,输出有3个类别,没有冗余特征,每个类别一个簇
X1, Y1 = make_classification(n_samples=400, n_features=2, n_redundant=0,
n_clusters_per_class=1, n_classes=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1)
plt.show()
3、make_gaussian_quantiles和make_hastie_10_2
sklearn.datasets.make_gaussian_quantiles(mean=None, cov=1.0, n_samples=100, n_features=2, n_classes=3,
shuffle=True, random_state=None)
①利用高斯分位点区分不同数据
②利用Hastie算法,生成2分类数据
#coding:utf-8
import matplotlib.pyplot as plt
from sklearn.datasets import make_gaussian_quantiles
from sklearn.datasets import make_hastie_10_2
X1, Y1 = make_gaussian_quantiles(n_samples=1000,n_features=2, n_classes=4)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1)
plt.show()
X1, Y1 = make_hastie_10_2(n_samples=1000)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1)
4、make_regression
(回归模型随机数据)
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression
# X为样本特征,y为样本输出, coef为回归系数,共1000个样本,每个样本1个特征
X, y, coef =make_regression(n_samples=1000, n_features=1,noise=10, coef=True)
# 画图
plt.scatter(X, y, color='black')
plt.plot(X, X*coef, color='blue',linewidth=3)
plt.show()
5、make_circles和make_moons
sklearn.datasets.make_circles(n_samples=100, shuffle=True, noise=None, random_state=None, factor=0.8)
sklearn.datasets.make_moons(n_samples=100, shuffle=True, noise=None, random_state=None)
from sklearn.datasets import make_circles
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
import numpy as np
## 分成1x2,占用第一个,即第一行第一列的子图
plt.subplot(121)
x1,y1=make_circles(n_samples=500,factor=0.5,noise=0.1)
plt.scatter(x1[:,0],x1[:,1],marker='o',c=y1)
plt.subplot(122)
x1,y1=make_moons(n_samples=500,noise=0.1)
plt.scatter(x1[:,0],x1[:,1],marker='o',c=y1)
plt.show()