机器学习笔记--特征工程
2017-11-21 12:24
591 查看
特征提取后常常会有许多问题,如缺失值问题/不属于同一纲量问题/信息冗余问题/信息利用率低问题.
以下使用鸢尾花数据集进行处理.
导入鸢尾花数据:
数据预处理
x′=x−X¯S
x′=x−MinMax−Min
x′=x∑nix2i√
![](https://img-blog.csdn.net/20171121112914705?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWthZGlhbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
显示输出:
![](https://img-blog.csdn.net/20171121122338870?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWthZGlhbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
分别使用鸢尾花数据的第1/2/3个特征作为x/y/z轴的坐标值,使用第四的特征作为坐标点的颜色指标,可以看到鸢尾花数据的大致分布情况如图:
![](https://img-blog.csdn.net/20171121130646565?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWthZGlhbw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
参考:https://www.cnblogs.com/jasonfreak/p/5448385.html
以下使用鸢尾花数据集进行处理.
导入鸢尾花数据:
from sklearn.datasets import load_iris iris = load_iris()
数据预处理
无纲量化:
将不同规格数据转换为同一规格.1.标准化
基于特征矩阵的列,将特征值转换至服从标准正态分布.x′=x−X¯S
from sklearn.preprocessing import StandardScaler StandardScaler().fit_transform(iris.data)
2.区间缩放法
区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放.x′=x−MinMax−Min
from sklearn.preprocessing import MinMaxScaler MinMaxScaler().fit_transform(iris.data)
3.归一化
归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。规则为L2的归一化公式:x′=x∑nix2i√
from sklearn.preprocessing import Normalizer Normalizer().fit_transform(iris.data)
定量特征二值化:
设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0鸢尾花数据集:
分别对鸢尾花数据集进行标准化/区间缩放/归一化/二值化处理# 特征工程 import numpy as np from sklearn.datasets import load_iris import matplotlib.pyplot as plt iris = load_iris() x = np.arange(len(iris.data)) iris0 = [iris.data[i][0] for i in range(len(iris.data))] iris1 = [iris.data[i][1] for i in range(len(iris.data))] iris2 = [iris.data[i][2] for i in range(len(iris.data))] iris3 = [iris.data[i][3] for i in range(len(iris.data))] from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import Normalizer from sklearn.preprocessing import Binarizer from sklearn.preprocessing import OneHotEncoder print OneHotEncoder().fit_transform(iris.target.reshape((-1,1))) plt.subplot(511), plt.plot(x, iris0, 'ys', x, iris1, 'g^', x, iris2, 'co', x, iris3, 'r*') for index in range(4): if index == 0: # 标准化--标准化需要计算特征的均值和标准差 iris_standard = StandardScaler().fit_transform(iris.data) elif index == 1: # 区间缩放法--常见的为利用两个最值进行缩放 iris_standard = MinMaxScaler().fit_transform(iris.data) elif index == 2: # 标准化与归一化的区别-- iris_standard = Normalizer().fit_transform(iris.data) elif index == 3: # 标准化与归一化的区别-- iris_standard = Binarizer(threshold=3).fit_transform(iris.data) iris_standard0 = [iris_standard[i][0] for i in range(len(iris_standard))] iris_standard1 = [iris_standard[i][1] for i in range(len(iris_standard))] iris_standard2 = [iris_standard[i][2] for i in range(len(iris_standard))] iris_standard3 = [iris_standard[i][3] for i in range(len(iris_standard))] plt.subplot(512+index), plt.plot(x, iris_standard0, 'ys', x, iris_standard1, 'g^', x, iris_standard2, 'co', x, iris_standard3, 'r*') plt.show()
显示输出:
分别使用鸢尾花数据的第1/2/3个特征作为x/y/z轴的坐标值,使用第四的特征作为坐标点的颜色指标,可以看到鸢尾花数据的大致分布情况如图:
# # 特征工程 import numpy as np from sklearn.datasets import load_iris import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import Normalizer from sklearn.preprocessing import Binarizer iris = load_iris() index = 0 if index == 0: # 原始数据 iris_standard = iris.data elif index == 1: # 标准化--标准化需要计算特征的均值和标准差 iris_standard = StandardScaler().fit_transform(iris.data) elif index == 2: # 区间缩放法--常见的为利用两个最值进行缩放 iris_standard = MinMaxScaler().fit_transform(iris.data) elif index == 3: # 归一化 iris_standard = Normalizer().fit_transform(iris.data) elif index == 4: # 定量特征二值化--设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0 iris_standard = Binarizer(threshold=3).fit_transform(iris.data) iris0 = [iris_standard[i][0] for i in range(len(iris_standard))] iris1 = [iris_standard[i][1] for i in range(len(iris_standard))] iris2 = [iris_standard[i][2] for i in range(len(iris_standard))] iris3 = [iris_standard[i][3] for i in range(len(iris_standard))] # iris3 = iris.target fig = plt.figure() ax = fig.add_subplot(111, projection='3d', axisbg= 'k') xs = iris0 ys = iris1 zs = iris2 cm = plt.cm.get_cmap('RdYlBu') ax.scatter(xs, ys, zs, c=iris3, vmin=min(iris3), vmax=max(iris3), s=10, cmap=cm, marker='o',linewidth=2, antialiased=True) ax.set_xlabel('X Label') ax.set_ylabel('Y Label') ax.set_zlabel('Z Label') plt.show()
参考:https://www.cnblogs.com/jasonfreak/p/5448385.html
相关文章推荐
- 七月算法机器学习笔记5 -- 特征工程
- 机器学习入门笔记(三):特征工程
- 机器学习笔记---特征工程概述
- 人工智障学习笔记——机器学习(1)特征工程
- 机器学习之特征工程
- 机器学习之特征工程简介
- 机器学习特征工程总结
- 机器学习之特征工程
- 机器学习-特征工程
- 机器学习 数据量不足问题----1 做好特征工程 2 不要用太多的特征 3 做好交叉验证 使用线性svm
- 机器学习之特征工程
- 机器学习中的特征工程总结一
- 机器学习 特征工程
- 机器学习——特征工程之主成分分析PCA
- 特征选择与稀疏学习——《机器学习》笔记
- 机器学习之特征工程
- 数据预处理 | 机器学习之特征工程
- [置顶] 机器学习中的特征工程
- 机器学习(一)特征工程基本流程
- 机器学习中的特征工程总结一