数据集
可用数据集
安装scikit-learn包:
pip3 install Scikit-learn
检测:
import sklearn
scikit-learn包含的内容:
- 分类、聚类、回归
- 特征模型
- 模型选择、调优
load_<dataset_name> 本地加载数据,保存在了本地磁盘上,本地加载数据,保存在..datasets\\data目录下的。
datasets.load_boston #波士顿房价数据集
datasets.load_breast_cancer #乳腺癌数据集
datasets.load_diabetes #糖尿病数据集
datasets.load_digits #手写体数字数据集
datasets.load_files
datasets.load_iris #鸢尾花数据集
datasets.load_lfw_pairs
datasets.load_lfw_people
datasets.load_linnerud #体能训练数据集
datasets.load_mlcomp
datasets.load_sample_image
datasets.load_sample_images
datasets.load_svmlight_file
datasets.load_svmlight_files
远程加载数据集。
比较大的数据集,主要用于测试解决实际问题,支持在线下载,下载下来的数据,默认保存在~/scikit_learn_data文件夹下,可以通过设置环境变量SCIKIT_LEARN_DATA修改路径,datasets.get_data_home()获取下载路径。
datasets.fetch_20newsgroups
datasets.fetch_20newsgroups_vectorized
datasets.fetch_california_housing
datasets.fetch_covtype
datasets.fetch_kddcup99
datasets.fetch_lfw_pairs
datasets.fetch_lfw_people
datasets.fetch_mldata
datasets.fetch_olivetti_faces
datasets.fetch_rcv1
datasets.fetch_species_distributions
构造数据集
下面以make_regression()函数为例,首先看看函数语法:
make_regression(n_samples=100, n_features=100, n_informative=10, n_targets=1, bias=0.0, effective_rank=None, tail_strength=0.5, noise=0.0, shuffle=True, coef=False, random_state=None)
参数说明:
n_samples:样本数
n_features:特征数(自变量个数)
n_informative:相关特征(相关自变量个数)即参与了建模型的特征数
n_targets:因变量个数
bias:偏差(截距)
coef:是否输出coef标识
datasets.make_biclusters
datasets.make_blobs
datasets.make_checkerboard
datasets.make_circles
datasets.make_classification
datasets.make_friedman1
datasets.make_friedman2
datasets.make_friedman3
datasets.make_gaussian_quantiles
datasets.make_hastie_10_2
datasets.make_low_rank_matrix
datasets.make_moons
datasets.make_multilabel_classification
datasets.make_regression
datasets.make_s_curve
datasets.make_sparse_coded_signal
datasets.make_sparse_spd_matrix
datasets.make_sparse_uncorrelated
datasets.make_spd_matrix
datasets.make_swiss_roll
获取数据
sklearn工具下面一共有24个数据集,只要直接导入就可以使用,就像导入一个csv文件一样。
以 datasets.load_boston()为例
from sklearn import datasets
iris = datasets.load_iris()
### 打印数据集,可以看到数据集的详细信息
print(iris)
### 获取数据
X = iris.data
### 获取标签
y = iris.target
### 获取标签名称
TarName = iris.target_names
### 获取特征名称
FeaName = iris.feature_names
数据生成器
datasets.make_moons
() 该函数会生成两个交叉的半圆型数据集,可以用做聚类和分类算法的数据集。生成的图形如下图所示:
### 生成200个数据点的数据
X,y = datasets.make_moons(200)
### 可视化数据
plt.scatter(X[:,0],X[:,1], s=40, c=y, cmap=plt.cm.Spectral)
加入noise函数
### 生成数据
X,y = datasets.make_moons(200, noise=0.20)
### 可视化数据
plt.scatter(X[:,0],X[:,1], s=40, c=y, cmap=plt.cm.Spectral)
datasets.make_circles()该函数会生成一个大圆,然后里面包含一个小圆。
生成的图形如下图所示:
X,y = datasets.make_circles(1000)
plt.scatter(X[:,0],X[:,1], s=40, c=y,cmap=plt.cm.Spectral)
为了让数据的分布没有那么工整,通常我们会加上noise参数。同时,会加上factor参数,用于控制大圆和小圆之间的间隔。
X,y = datasets.make_circles(1000, noise=0.03, factor=0.5)
plt.scatter(X[:,0],X[:,1], s=40, c=y,cmap=plt.cm.Spectral)
数据集的划分
获取的数据不是全部都拿来训练一个模型,否则无法评估模型。
机器学习一般将数据集划分两部分:
- 训练数据:用于训练,构建模型。
- 测试数据:在模型检验时使用,用于评估模型是否有效。
划分比例:
- 训练集:70% 80% 75%
- 测试集:30% 20% 30%
数据集划分api
sklearn.model_selection.train_test_split(arrays,*options)
- x数据集的特征值。
- y数据集的标签值。
- test_size测试集的大小,一般为float。
- random_state随机数种子,不同的种子会照成不同的随机采样结果。相同的种子采样结果相同。
- return训练集特征值,测试集特征值,训练集目标值,测试集目标值。
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris=datasets.load_iris()
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
print(x_train,x_train.shape)
因为原数据是150,使用test_size=0.2后,变成120【即150*0.8,test_size默认为0.25】
特征工程(Feature Engineering)
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
特征抽取
- 机器学习算法->统计方法->数学公式
- 文本类型->数值
将任意数据(如文本或图像)转换为可用于机器学习的数字特征。
- 字典特征提取(特征离散化)
- 文本特征提取
- 图像特征提取
特征提取API
sklearn.feature_extraction
字典特征提取
sklearn.feature_extraction.DictVectorizer(sparse=True,...)
- DictVectorizer.fit_transform(X) X:字典或者包含字典的的迭代器返回值:返回sparse矩阵。
- DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式。
- DictVectorizer.get_feature_names() 返回类别名称。
字典特征提取是把类别->one-hot编码。
from sklearn.feature_extraction import DictVectorizer
data=[{'city':'Beijing','temperature':100},{'city':'Shanghai','temperature':60},{'city':'Shenzhen','temperature':30}]
#实例化一个转化器。
transfer=DictVectorizer(sparse=False)
#调用fit_transform()
data_new=transfer.fit_transform(data)
print("data_new:\n",data_new)
若不设置sparse,则默认为True。
结果为:
data_new:
(0, 0) 1.0
(0, 3) 100.0
(1, 1) 1.0
(1, 3) 60.0
(2, 2) 1.0
(2, 3) 30.0
- 该结果是把非0的值,按位置标出来,即sparse矩阵。
- sparse矩阵节省内存,提高加载效率。
若设置sparse为False,则:
data_new:
[[ 1. 0. 0. 100.]
[ 0. 1. 0. 60.]
[ 0. 0. 1. 30.]]可用transfer.get_feature_names_out()输出特征名字。
print("特征名字:\n",transfer.get_feature_names_out())
应用场景
- pclass,sex 数据集当中类别特征比较多。【1、将数据集的特征->字典类型 2、DictVectorizer转换】
- 本身拿到的数据就是字典类型。