机器学习笔记(一)-特征提取

时间:2023-01-22 14:39:25

机器学习笔记(一)

一、什么是机器学习?

机器学习是从数据中自动分析获取规律(模型),并利用规律对未知数据进行预测。通常这些要处理的数据是保存在文件中而不是数据库中的。

 

、数据的格式(dataframe)

一般数据的结构是 特征值+目标值 的形式,当然有时候也可以没有目标值。

数据中对于特征的处理通常用到两个根据 sklearn,pandas

 

 三、数据的特征提取

特征提取是对文本等数据进行特征值化,让计算机更好的理解数据。

3.1字典特征提取

样例:

from sklearn.feature_extraction import DictVectorizer

def dictVect():
    '''
    字典数据抽取
    '''
    #实例化
    dict=DictVectorizer(sparse=False)
    data=dict.fit_transform([{'city':'北京','temperature':100},{'city':'上海','temperature':80},{'city':'武汉','temperature':70}])
    print(dict.feature_names_)
    print(data)  # ndarray 二维数组
    return None

if __name__=='__main__':
    dictVect()


 输出结果为一个 二维数组

机器学习笔记(一)-特征提取

 

 3.2文本特征抽取及中文问题

英文文本特征抽取方法:

实例:

机器学习笔记(一)-特征提取机器学习笔记(一)-特征提取
from sklearn.feature_extraction.text import CountVectorizer
def countVect():
    """
    对文本进行特征值化
    :return:
    """
    cv=CountVectorizer()
    data=cv.fit_transform(['life is is short , I use python','it is perfect','like it'])
    print(cv.get_feature_names())  # 不统计单个英文字母   统计单词出现的次数
    print(data.toarray())  # sparse矩阵转换为数组

    return None

if __name__=='__main__':
 
    #countVect()
View Code

 

中文文本特征抽取方法一:

(1)准备句子,利用jieba.cut()进行分词

(2)实例化CountVectorizer

(3)将分词结果变成字符串作为fit_transform()的输入值

 

实例如下:

from sklearn.feature_extraction.text import CountVectorizer
import jieba
def cutWord():
    con1=jieba.cut("今天天气很好,高高兴兴去上学")  # 对汉语句子进行分词  返回的是一个生成器,不是列表
    con2=jieba.cut("人生苦短,珍惜每一天")
    con3=jieba.cut("努力就会有收获,岂能不劳而获")
    # 转换成列表
    content1=list(con1);
    content2 = list(con2);
    content3 = list(con3);
    # 把列表转换为字符串,以空格分隔原来列表中的元素
    c1=' '.join(content1)
    c2=' '.join(content2)
    c3=' '.join(content3)
    return c1,c2,c3

def hanziVector():
    """
    中文特征值化
    :return:
    """
    c1,c2,c3=cutWord()
    print(c1,c2,c3)

    cv = CountVectorizer()
    data = cv.fit_transform([c1,c2,c3])
    print(cv.get_feature_names())  # 不统计单个英文字母   统计单词出现的次数
    print(data.toarray())  # sparse矩阵转换为数组
    return None

if __name__=='__main__':
 
    hanziVector()

 

运行结果:

机器学习笔记(一)-特征提取

 

 

 方法二:使用tf*idf来表示某个词在某篇文章中的重要性

tf (term frequency)   词的频率

idf(inverse document frequency)逆文档频率   log(总文档数量/该词出现的文档数量)

如果某个词或者短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语有很好的类别区分度,适合用来分类。

 

实例:

机器学习笔记(一)-特征提取机器学习笔记(一)-特征提取
from sklearn.feature_extraction.text import TfidfVectorizer

def cutWord():
    con1=jieba.cut("今天天气很好,高高兴兴去上学")  # 对汉语句子进行分词  返回的是一个生成器,不是列表
    con2=jieba.cut("人生苦短,珍惜每一天")
    con3=jieba.cut("努力就会有收获,岂能不劳而获")
    # 转换成列表
    content1=list(con1);
    content2 = list(con2);
    content3 = list(con3);
    # 把列表转换为字符串,以空格分隔原来列表中的元素
    c1=' '.join(content1)
    c2=' '.join(content2)
    c3=' '.join(content3)
    return c1,c2,c3

def tfIdfVector():
    """
    中文特征值化
    :return:
    """
    c1,c2,c3=cutWord()
    print(c1,c2,c3)

    tf=TfidfVectorizer()    # tf*idf  代表的是词的重要性程度
    data = tf.fit_transform([c1,c2,c3])
    print(tf.get_feature_names())  # 不统计单个英文字母   统计单词出现的次数
    print(data.toarray())  # sparse矩阵转换为数组
    return None


if __name__=='__main__':
    
    tfIdfVector()
View Code

运行结果:

机器学习笔记(一)-特征提取