效果演示
from sklearn.feature_extraction.text import CountVectorizer
vector = CountVectorizer()
res = vector.fit_transform(['lift is short,i love python','lift is too long,i hate python'])
print(res.toarray())
–模块导入
from sklearn.feature_extraction import DictVectorizer
alist = [
{'city':'BeiJing','temp':33},
{'city':'GZ','temp':42},
{'city':'SH','temp':40}
]
#实例化一个工具类对象
d = DictVectorizer()
#返回的是一个sparse矩阵(存储的就是特征值化之后的结果)
feature = d.fit_transform(alist)
print(feature)
from sklearn.feature_extraction import DictVectorizer
alist = [{'city':'BeiJing','temp':33},{'city':'GZ','temp':42},{'city':'SH','temp':40}]
d = DictVectorizer(sparse=False)#sparse=False
#返回的是一个二维列表
feature = d.fit_transform(alist)
print(d.get_feature_names())
print(feature)
#输出结果:1为是,0为不是
- 作用:对文本数据进行特征值化
- from sklearn.feature_extraction.text import CountVectorizer
- fit_transform(X):X为文本或者包含文本字符串的可迭代对象,返回sparse矩阵
- inverse_transform(X):X为array数组或者sparse矩阵,返回转换之前的格式数据
- get_feature_names()
- toarray():将sparse矩阵换成数组
from sklearn.feature_extraction.text import CountVectorizer
vector = CountVectorizer()
res = vector.fit_transform(['left is is short,i love python','left is too long,i hate python'])
# print(res) #sparse矩阵
print(vector.get_feature_names())
print(res.toarray()) #将sparse矩阵转换成数组
#注意:单字母不统计(因为单个字母代表不了实际含义),然后每个数字表示的是单词出现的次数
- 无量纲化:
- 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布 的需求这种需求统称为将数据“无量纲化”譬如梯度和矩阵为核心的算法中,譬如逻辑回归,支持向量机,神经 网络,无量纲化可以加快求解速度;而在距离类模型,譬如K近邻,K-Means聚类中,无量纲化可以帮我们提升模 型精度,避免某一个取值范围特别大的特征对距离计算造成影响。(一个特例是决策树和树的集成算法们,对决策 树我们不需要无量纲化,决策树可以把任意数据都处理得很好。)
- 那么预处理就是用来实现无量纲化的方式。
- 含义:特征抽取后我们就可以获取对应的数值型的样本数据啦,然后就可以进行数据处理了。
- 概念:通过特定的统计方法(数学方法),将数据转换成算法要求的数据
- 方式:
- 归一化
- 标准化
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler(feature_range=(0,1))#:每个特征缩放的范围
data = [[90,2,10,40],[60,5,15,45],[73,3,13,45]]
data = mm.fit_transform(data)#:X需要归一化的特征
print(data)
- 问题:如果数据中存在的异常值比较多,会对结果造成什么样的影响?
- 结合着归一化计算的公式可知,异常值对原始特征中的最大值和最小值的影响很大,因此也会影响对归一化之后的值。这个也是归一化的一个弊端,无法很好的处理异常值。
- 归一化总结:
- 在特定场景下最大值和最小值是变化的,另外最大最小值很容易受到异常值的影响,所以这种归一化的方式具有一定的局限性。因此引出了一种更好的方式叫做:标准化!!!
- 归一化和标准化总结:
- 对于归一化来说,如果出现了异常值则会响应特征的最大最小值,那么最终结果会受到比较大影响
- 对于标准化来说,如果出现异常点,由于具有一定的数据量,少量的异常点对于平均值的影响并不大,从而标准差改变比较少。
- 工具:
- Filter(过滤式)【主要讲解】
- Embedded(嵌入式):决策树模型会自己选择出对其重要的特征。【后期在讲解模型的时候在补充】
- PCA降维
from sklearn.feature_selection import VarianceThreshold
#threshold方差的值,删除所有方差低于x的特征,默认值为0表示保留所有方差为非0的特征
v = VarianceThreshold(threshold=1)
v.fit_transform([[0,2,4,3],[0,3,7,3],[0,9,6,3]])#:X为特征