人工智能_1_初识_机器学习介绍_特征工程和文本特征提取

2020-05-08 15:35:27 浏览数 (1)

代码语言:javascript复制
# 人工智能:预测,分类
# 人工智能:
#   自动的工作
#   机器学习(包含深度学习)
# 以前的限制因素:计算能力,数据,算法发展
# 用途:
#   图像识别
#       识别图片中不同的地方(医学CT) 不用人工识别
#       图片艺术化(可以替代ps)
#       无人驾驶
#       人脸识别
#   自然语言处理
#       语音识别
#       自动写报告
#   传统预测
#       性能评估
#       NLP
#       推荐系统
# 机器学习的数据:文件格式,csv(逗号分隔值)
#   不使用数据库:
#       1,性能瓶颈,数量过多,2,3GB 读取慢
#       2,数据格式不符合机器学习要求的格式
# pandas:读取工具,速度非常快
# sklearn:对于特征的处理提供了强大的接口
# numpy:(释放了GIL) 速度快

# 数据集
#   kaggle ,大数据竞赛平台
#   UCI,覆盖面广
#   scikit-learn,数据量小,方便学习

# 常用数据集的结构组成:特征值 目标值
# dataFrame:行锁引,列索引
""" 身高 体重 肤色,头发长度   (特征值)               目标值
1                                                 男  女
2
有些数据集可以没有目标值
dataFrame:缺失值,数据转换
机器学习:重复值 不需要去重
"""
# 特征工程
#   是什么:将原始数据转换为更好的代表预测模型的潜在问题特征的过程,提高预测效果
#   意义:直接影响预测结果
#   scikit-learn库介绍:包含许多机器学习算法实现
#       pip install scikit-learn即可 需要先安装 numpy,pandas等库
#   数据特征的提取
# 特征值化  ---> 转化为数字
# ===========================================================================================
# 对字典进行特征抽取
from sklearn.feature_extraction import DictVectorizer
def dictvec():
    """
    字典数据抽取
    :return: None
    """
    # 实例化
    dict = DictVectorizer(sparse=False)
    data = dict.fit_transform([
        {"city": "北京", "templature": 100},
        {"city": "天津", "templature": 30},
        {"city": "上海", "templature": 60},
                        ])
    print(dict.get_feature_names()) # ['city=上海', 'city=北京', 'city=天津', 'templature']
    print(data)  # 矩阵

"""
  (0, 1)    1.0
  (0, 3)    100.0
  (1, 2)    1.0
  (1, 3)    30.0
  (2, 0)    1.0
  (2, 3)    60.0
['city=上海', 'city=北京', 'city=天津', 'templature'] feature_names
[[  0.   1.   0. 100.] One-hot编码  对于每条数据,若属于摸个特征标记为1,否则为0
 [  0.   0.   1.  30.]
 [  1.   0.   0.  60.]]
"""
# 注意:把字典中一些类别的一些数据转化为特征,对于数字类型不进行转换
#       对于数组类型,若有特征值,需要转换为字典  (切转化时选择有效的特征值)
# DictVectorizer(Sparse=True,....) 默认转化为矩阵,改为false变为数组
#   DictVectorizer.fit_transform(X) X 为字典或迭代器  返回一个sparse矩阵
#   DictVectorizer.inverse_transform(X) X 数组或sparse  返回一个之前的格式
#   DictVectorizer.get_feature_names() 返回类别类型
#   DictVectorizer.trasnsform(X) 按照原先的标准转换
# ===========================================================================================
# 对文本进行抽取
from sklearn.feature_extraction.text import CountVectorizer
import jieba
def countvec():
    cv = CountVectorizer()  # 里边没有参数
    res = cv.fit_transform([ # 传入的需要是 空格分开的词的形式,因此对于中文需要处理
        "life is short,I like python,life is too long",# 每个看做短文章
        "a is the first of alphabet",
        " ".join(list(jieba.cut("下载jieba-0.39.zip然后解压。记住路径。cmd进入命令输入界面,首先cd到我们刚刚解压文件的路径。%这一步有问题就百度cd完以后,python setup.py install然后就会出现安装进度条,结束。确定有没有安装成功,进入任意一个prompt输入import jieba,看看有没有提示报错。如果没有,就是安装成功了。"))),
    ])
    print(cv.get_feature_names())
    print(res.toarray())
"""
['39', 'alphabet', 'cd', 'cmd', 'first', 'import', 'install', 'is', 'jieba', 'life', 'like', 'long', 'of', 'prompt', 'py', 'python', 'setup', 'short', 'the', 'too', 'zip', '一个', '一步', '下载', '以后', '任意', '出现', '刚刚', '命令', '如果', '安装', '就是', '成功', '我们', '报错', '提示', '文件', '有没有', '没有', '然后', '界面', '百度', '看看', '确定', '结束', '解压', '记住', '路径', '输入', '进入', '进度条', '问题', '首先']
[[0 0 0 0 0 0 0 2 0 2 1 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
 [1 0 2 1 0 1 1 0 2 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 3 1 2 1 1 1
  1 2 1 2 1 1 1 1 1 2 1 2 2 2 1 1 1]]
统计每个词在文章中出现的次数
"""
# 文本特征抽取:Count    文本分类(词的不同) 情感分析
# 单个字母,汉字,符号不统计  英文他们没有具体的代表性,因此 汉字 需要分词 pip install jieba
# import jieba jieba.cut("xxxxxx") 返回值是词语生成器 list(ret)转换为list   " ".join(list)转为空格隔开的字符串




# 对于一些常用的词语 '我们' 等 不能很好地区分 ----------->tf idf (朴素贝叶斯也要使用)
# tf:term frequency 词的频率   出现的次数
# idf:逆文档的频率inverse document frequecy log(总文档数量/该词出现的文档数量)
# tf*idf ---->重要性 得出改次在该文档中的重要性
# 每篇文档每个词都有重要性,不同文章的同一个词重要性不同
# 如果一个文章中的 一个词在文章中重要性高,没其文章中低------>改词可用于区分分类
# 语法
# TfidfVectorizer(stop_words=None,.....)
#   返回权重矩阵
#   TfidfVectorizer.fit_transform(X) 可迭代对象,返回sparse矩阵
#   TfidfVectorizer.inverse_transform(X) 反向
#   TfidfVectorizer.get_feature_names() 单词列表
from sklearn.feature_extraction.text import TfidfVectorizer
def tfidfvec():
    tfidf = TfidfVectorizer()
    data = tfidf.fit_transform([
        "life is short,I like python,life is too long",# 每个看做短文章
        "a is the first of alphabet",
        " ".join(list(jieba.cut("下载jieba-0.39.zip然后解压。记住路径。cmd进入命令输入界面,首先cd到我们刚刚解压文件的路径。%这一步有问题就百度cd完以后,python setup.py install然后就会出现安装进度条,结束。确定有没有安装成功,进入任意一个prompt输入import jieba,看看有没有提示报错。如果没有,就是安装成功了。"))),
    ])
    print(tfidf.get_feature_names())
    print(data.toarray())
"""
['39', 'alphabet', 'cd', 'cmd', 'first', 'import', 'install', 'is', 'jieba', 'life', 'like', 'long', 'of', 'prompt', 'py', 'python', 'setup', 'short', 'the', 'too', 'zip', '一个', '一步', '下载', '以后', '任意', '出现', '刚刚', '命令', '如果', '安装', '就是', '成功', '我们', '报错', '提示', '文件', '有没有', '没有', '然后', '界面', '百度', '看看', '确定', '结束', '解压', '记住', '路径', '输入', '进入', '进度条', '问题', '首先']
# 返回权重矩阵,显示每个文章的特征值(每行代表一篇文章,每列表示一个词,在该文章中的重要性),是否存在,若存在显示为重要性,不存在为0
[[0.         0.         0.         0.         0.         0.
  0.         0.46088245 0.         0.60600504 0.30300252 0.30300252
  0.         0.         0.         0.23044123 0.         0.30300252
  0.         0.30300252 0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.        ]
 [0.         0.46735098 0.         0.         0.46735098 0.
  0.         0.35543247 0.         0.         0.         0.
  0.46735098 0.         0.         0.         0.         0.
  0.46735098 0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.         0.
  0.         0.         0.         0.         0.        ]
 [0.11353496 0.         0.22706991 0.11353496 0.         0.11353496
  0.11353496 0.         0.22706991 0.         0.         0.
  0.         0.11353496 0.11353496 0.08634626 0.11353496 0.
  0.         0.         0.11353496 0.11353496 0.11353496 0.11353496
  0.11353496 0.11353496 0.11353496 0.11353496 0.11353496 0.11353496
  0.34060487 0.11353496 0.22706991 0.11353496 0.11353496 0.11353496
  0.11353496 0.22706991 0.11353496 0.22706991 0.11353496 0.11353496
  0.11353496 0.11353496 0.11353496 0.22706991 0.11353496 0.22706991
  0.22706991 0.22706991 0.11353496 0.11353496 0.11353496]]
"""
# =============================================================================================
if __name__=="__main__":
#   dictvec()
#     countvec()
    tfidfvec()
    pass

0 人点赞