1、特征工程是什么
特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的预测准确性。
2、特征工程的意义
直接影响预测结果
3、数据的特征抽取 将文本、字符串等数据转换为数字的形式(特征值化) (1)字典数据特征值化
类:sklearn.feature_extraction.DictVectorizer DictVectorizer.fit_transform(X)
X:字典或包含字典的迭代器 返回值:返回sparse矩阵
In [1]:from sklearn.feature_extraction import DictVectorizer dict = DictVectorizer() #实例化 data = dict.fit_transform([{'city':'北京','temperature':100},{'city':'上海','temperature':36},{'city':'深圳','temperature':90}]) print(data) Out [1]: (0, 1) 1.0 (0, 3) 100.0 (1, 0) 1.0 (1, 3) 36.0 (2, 2) 1.0 (2, 3) 90.0 #sparse矩阵格式 #标记了每个值在二维数组中的位置,其他位置为0。DictVectorizer.inverse_transform(X)
X:array数组或spparse矩阵 返回值:转换之前的数据格式
DictVectorizer.get_feature_names()
返回类别名称
#dict = DictVectorizer(sparse=False)二维数组 In [2]:print(dict.get_feature_names()) Out [2]: [[ 0. 1. 0. 100.] [ 1. 0. 0. 36.] [ 0. 0. 1. 90.]] ['city=上海', 'city=北京', 'city=深圳', 'temperature'] #one-hot编码:为每个类别生成一个布尔阵,每一列只有一个样本取值为1DictVectorizer.transform(X)
按照原先的标准转换
(2)文本特征抽取
作用:对文本数据进行特征值化
1、统计所有文章所有的词,重复的只看作一次 2、对每篇文章,在词的列表里面统计每个词出现的次数 3、对于单个英文字母不进行统计 4、对于中文,要先进行分词再进行文本抽取
类:sklearn.feature_extraction.text.CountVectorizer CountVectorizer() 返回词频矩阵 CountVectorizer.fit_transform(X)
X:文本或者包含字符串的可迭代对象 返回值:返回sparse矩阵 利用toarray()进行sparse矩阵转换array数组
In [1]:from sklearn.feature_extraction.text import CountVectorizer cv = CountVectorizer() data = cv.fit_transform(["life is short,i like python","life is long, i dislike python"]) print(data.toarray()) Out [1]: [[0 1 1 1 0 1 1] [1 1 1 0 1 1 0]]CountVectorizer.inverse_transform(X)
array数组或者sparse矩阵 返回值:转换之前的数据格式
CountVectorizer.get_feature_names()
返回值:单词列表
In [2]:print(data.toarray()) print(cv.get_feature_names()) Out [1]: [[0 1 1 1 0 1 1] [1 1 1 0 1 1 0]] ['dislike', 'is', 'life', 'like', 'long', 'python', 'short']中文分词
In [8]:pip install jieba import jieba In [9]:c1 = jieba.cut("今天很残酷,明天更残酷,后天很美好,但绝大多数人死在明天晚上") In [10]:content1 = list(c1) c1= ''.join(content1) #把列表转换成字符串文本(3)文本特征抽取——tf idf
tf * idf :重要性 tf:term frequency词的频率 idf:inverse document frequency逆文档频率 log(总文档数量/该词出现的文档数量)**