Machine Learning 学习2
特征提取
特征提取有两种方法,一种是DictVectorizer,另一种是CountVectorizer。分别用于字典特征提取和文本特征提取。
首先要从sklearn.feature_extraction中导入DictVectorizer这个类型,它的作用其实就是将字典集向量化。但是需要用一个变量将其实例化。
fit_transform()的返回值是一个sparse矩阵,将所有的特征值作为列索引,并且返回值即为1/0,表示后面的key是否表示该元素的属性;并且对于所有元素都有的key列下填入相应的值。
如下例字典特征提取:
import sklearn
from sklearn.feature_extraction import DictVectorizer
def dict_demo():
# 一个字典集
data = [{
'city': '北京', 'temperature': 100}, {
'city': '上海', 'temperature': 60}, {
'city': '深圳', 'temperature': 30}]
transfer = DictVectorizer()
data_new = transfer.fit_transform(data)
print("data_new:\n", data_new.toarray())
print("data_new_name:\n", transfer.get_feature_names())
dict_demo()
输出:
data_new:
[[ 0. 1. 0. 100.]
[ 1. 0. 0. 60.]
[ 0. 0. 1. 30.]]
data_new_name:
['city=上海', 'city=北京', 'city=深圳', 'temperature']
用实例化对象的get_feature_names()获取array中的列索引的特征值。
对于文本特征提取:
from sklearn.feature_extraction.text import CountVectorizer
def count_demo():
data = ['life is short, i like like python.', 'life is too long, i dislike python']
transfer = CountVectorizer()
data_new = transfer.fit_transform(data)
print("Data_new:\n", data_new.toarray())
print("Data_new_name:\n", transfer.get_feature_names())
count_demo()
输出:
Data_new:
[[0 1 1 2 0 1 1 0]
[1 1 1 0 1 1 0 1]]
Data_new_name:
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']
通过输出可以看到,data_new的的值有两行,而这两行正对应着文本集的两个元素,而列索引正是每一个元素出现的次数。