机器学习——特征工程2
数据降维
降维:这里的维度指特征的数量
- 数据降维的两种方法:
- 特征选择
- 主成分分析
特征选择
特征选择就是单纯地从提取到的所有特征中选择部分特征作为训练集特征,特征在选择前和选择后可以改变值、也不改变值,但是选择后的特征维数肯定比选择前小,毕竟我们只选择了其中的一部分特征。
主要方法:Filter(过滤式):VarianceThreshold、Embedded(嵌入式):正则化、决策树、Wrapper(包裹式)、神经网络
- 冗余:部分特征的相关度高,容易消耗计算机性能
- 噪声:部分特征对预测结果有负影响
sklearn特征选择API:sklearn.feature_selection
过滤式特征选择
- VarianceThreshold(threshold = 0.0)
- 删除所有低方差特征
- Variance.fit_transform(X,y)
- X: numpy array格式的数据[n_samples,n_features]
- 返回值:训练集差异低于threshold的特征将被删除
- 默认值是保留所有非零方差特征,即删除所有样本
中具有相同值的特征。
from sklearn.feature_selection import VarianceThreshold
var = VarianceThreshold(threshold=0.0)
data = var.fit_transform([[0,1,2],[0,2,3],[0,2,1]])
print(data)
主成分分析
本质:PCA是一种分析、简化数据集的技术
目的:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。
作用:可以削减回归分析或者聚类分析中特征的数量
- PCA(n_components=None)
- 将数据分解为较低维数空间
- PCA.fit_transform(X)
- X:numpy array格式的数据[n_samples,n_features]
- 返回值:转换后指定维度的array
注:n_components通常为小数或者整数,若为小数代表保留信息的比例,若为整数代表保留特征的个数。
sklearn降维API: sklearn.decomposition
from sklearn.decomposition import PCA
pca = PCA(n_components = 0.9)
data = pca.fit_transform([[2,8,4,5],[6,3,0,8],[5,4,9,1]])
print(data)
数据集的划分和介绍
数据集的介绍
sklearn数据集API: sklearn.datasets
- sklearn.datasets
- 加载获取流行数据集
- datasets.load_*()
- 获取小规模数据集,数据包含在datasets里
- datasets.fetch_*(data_home=None)
- 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是~/scikit_learn_data/
获取数据集返回的类型
- load和fetch返回的数据类型为datasets.base.Bunch(字典格式)
- data:特征数据数组,是[n_samples*n_features]的二维numpy.ndarray数组
- target:标签数组,是n_samples的一维numpy.ndarray数组
- DESCR:数据描述
- feature_names:特征名,注意 新闻数据、手写数字、回归数据集 没有
- target_names:标签名,回归数据集没有
分类数据集
- sklearn.datasets.load_iris()
- 加载并返回鸢尾花数据集
- sklearn.datasets.load_digits()
- 加载并返回数字数据集
from sklearn.datasets import load_iris
li = load_iris()
print("特征值")
print(li.data)
print("标签值")
print(li.target)
print(li.DESCR)
用于分类的大数据集
- sklearn.datasets.fetch_20newsgroup(data_home=None, subset = ‘train’)
- subset:‘train’或者’test’, ‘all’, 可选,选择要加载的数据集,训练集的“训练”,测试集的“测试”,两者的“全部”
- datasets.clear_data_home(data_home=None)
- 清除目录下的数据
from sklearn.datasets import fetch_20newsgroups
f = fetch_20newsgroups(subset='all')
print("特征值")
print(f.data)
print("标签值")
print(f.target)
print(f.DESCR)
回归数据集
sklearn回归数据集
- sklearn.datasets.load_boston()
- 加载并返回波士顿房价数据集
from sklearn.datasets import load_boston
lb = load_boston()
print("特征值")
print(lb.data)
print("标签值")
print(lb.target)
print(lb.DESCR)
- sklearn.datasets.load_diabetes()
- 加载和返回糖尿病数据集
数据集的划分
sklearn数据集划分的API: sklearn.model_selection.train_test_split
- sklearn.model_selection.train_test_split(*array,**options)
- x:数据集的特征值
- y:数据集的标签值
- test_size:测试集的大小,一般为float
- random_state:随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
- return:训练集特征值,测试值特征值,训练标签,测试标签(默认随机取)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)
print("训练集特征值和目标值:", x_train, y_train)
print("测试集特征值和目标值:", x_test, y_test)
转换器与估计器
fit()、transform()与fit_transform()
fit_transform:输入数据直接转换
fit:输入数据,计算平均值,方差等,但不转换数据
transform:进行数据转换
下面举个实例来比较:
from sklearn.preprocessing import StandardScaler
s = StandardScaler()
print(s.fit_transform([[1,2,3],[4,5,6]]))
# 输出结果
[[-1. -1. -1.]
[ 1. 1. 1.]]
ss = StandardScaler()
ss.fit([[2,3,4],[3,5,7]])
print(ss.transform([[1,2,3],[4,5,6]]))
# 输出结果
[[-3. -2. -1.66666667]
[ 3. 1. 0.33333333]]
估计器
在sklearn中,估计器(estimator)是一个重要的角色,分类器和回归器都属于estimator,是一类实现了算法的API.
- 用于分类的估计器:
- sklearn.neighbors k-近邻算法
- sklearn.naive_bayes 贝叶斯
- sklearn.linear_model.LogisticRegression 逻辑回归
- 用于回归的估计器:
- sklearn.linear_model.LinearRegression 线性回归
- sklearn.linear_model.Ridge 岭回归
估计器的工作流程