第一节 特征工程和文本特征提取

机器学习数据:csv文件
可用数据集:
UCI:收录了360个数据集,覆盖科学、生活、经济等领域,数据量几十万
Kaggle:大数据竞赛平台,80万科学家,数据真实,数据量巨大
scikit-learn:数据量小,方便学习
数据结构:特征值(+目标值)
特征工程:将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高对未知数据的预测准确性,将会直接影响预测结果

# 字典特征抽取,将字典中一些类别数据分别进行转换成特征,即把类别特征转换成One-hot编码
from sklearn.feature_extraction import DictVectorizer

def dicrvec():
    # 实例化一个对象,sparse是否转换成sparse矩阵格式数据,false转换成二维数组
    dictv = DictVectorizer(sparse=False)
    
    # fit_transform对字典进行数据特征抽取
    data = dictv.fit_transform([{'city':'北京', 'temperature':'100'}, {'city':'上海', 'temperature':'70'}, {'city':'广州', 'temperature':'60'}])
    
    # get_feature_names返回类别的名称
    print(dictv.get_feature_names())
    
    # 将数据转换成原来的字典,但是类别已经被转化成数字
    print(dictv.inverse_transform(data))
    
    print(data)

if __name__ =="__main__":
    dicrvec()
# 文本特征抽取:对文本数据进行特征值化
from sklearn.feature_extraction.text import CountVectorizer

def countvec():
    cv = CountVectorizer()

    # fit_transform首先统计文章中不重复的单词['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too'],单个字母不统计,因为单个字母不体现分类的依据
    # 然后统计上面列表中的单词在每一篇文章中出现的次数[0 1 1 1 0 1 1 0],[1 1 1 0 1 1 0 1]
    # 如果是中文的话,要先进行分词,需安装第三方库如,jieba
    data = cv.fit_transform(['life is short, i like python python', 'life is too long,i dislike python'])

    print(cv.get_feature_names())

    # CountVectorizer中没有sparse=false这个参数,只能用toarray将sparse矩阵转换成数组
    print(data.toarray())

if __name__ == "__main__":
    countvec()
# TF-IDF:TF词的频率,IDF逆文档频率log(总文档数量/该次出现的文档数),如果某个词或者短语在一篇文章中出现的概率高,并且在其他文章中很少出现则认为此词具有很好的类别区分能力,适合用来分类
# TF-IDF用来评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度,结果但会浮点数,越大越重要 == TF*IDF
from sklearn.feature_extraction.text import TfidfVectorizer

def tfidtvec():
    tf = TfidfVectorizer()

    data = tf.fit_transform(['life is short, i like python python', 'life is too long,i dislike python'])

    print(tf.get_feature_names())

    # TfidfVectorizer中没有sparse=false这个参数,只能用toarray将sparse矩阵转换成数组
    print(data.toarray())

if __name__ == "__main__":
    tfidtvec()
原文地址:https://www.cnblogs.com/kogmaw/p/12565796.html