机器学习概述、特征工程、Scikit-learn

先来拜见一下祖师爷(祖师爷真帅)

img

“人工智能之父” 艾伦.图灵 图灵测试(1950)

img

马文·李·闵斯基(英语:Marvin Lee Minsky,1927年8月9日-2016年1月24日),科学家,专长于认知科学与人工智能领域,麻省理工学院人工智能实验室的创始人之一,著有几部人工智能和哲学方面的作品。1969年,因为在人工智能领域的贡献,获得图灵奖。

img
img
img
img

图片艺术化 GAN神经网络

img

这就说明了Python天下第一
开个玩笑,语言只是工具,我写Java的时候也说Java天下第一,
PHP才是世界上最好的语言

img

就这些书啊,我都没有看过,不过我还年轻,以后我也不会看的。

什么是机器学习

机器学习是从数据中自动分析获得规律(模型),并利用规律对未知数据进行预测

为什么需要机器学习

img

机器学习应用场景

img

数据类型

  • 离散型数据:由记录不同类别个体的数目所得到的数据,又称计数数据,所有这些数据全部都是整数,而且不能再细分,也不能进一步提高他 们的精确度。
  • 连续型数据:变量可以在某个范围内取任一数,即变量的取值可以是连续的,如,长度、时间、质量值等,这类整数通常是非整数,含有小数部分。

注:只要记住一点,离散型是区间内不可分,连续型是区间内可分

可用数据集

img
  • scikit-learn特点:数据量较小、方便学习
  • UCI特点:收录了360个数据集、覆盖科学、生活、经济等领域 、数据量几十万
  • Kaggle特点:大数据竞赛平台、80万科学家、真实数据、数据量巨大

常用数据集数据的结构组成

结构:特征值+目标值

img

注:有些数据集可以没有目标值

img

如何利用工具自己进行对原始数据(非连续型)的处理?

数据的特征工程

特征工程是什么

特征工程是将原始数据转换为更好地代表预测模型的潜在问题的特征的过程,从而提高了对未知数据的模型准确性

特征工程的意义

直接影响模型的预测结果

Scikit-learn库介绍

  • Python语言的机器学习工具
  • Scikit-learn包括许多知名的机器学习算法的实现
  • Scikit-learn文档完善,容易上手,丰富的API,使其在学术界颇受欢迎。

特征抽取

数据的特征抽取

特征抽取实例演示

from sklearn.feature_extraction.text import CountVectorizer

# 实例化CountVectorizer
vector = CountVectorizer()

# 调用fit_transform输入并转换数据
res = vector.fit_transform(["Life is short, you need python", "Life is too long, you did not need python"])

# 打印结果
print(vector.get_feature_names())
print(res.toarray())

运行结果

['did', 'is', 'life', 'long', 'need', 'not', 'python', 'short', 'too', 'you']
[[0 1 1 0 1 0 1 1 0 1]
 [1 1 1 1 1 1 1 0 1 1]]

通过演示得出结论:

  • 特征抽取针对非连续型数据
  • 特征抽取对文本等进行特征值化

注:特征值化是为了计算机更好的去理解数据

sklearn特征抽取API

sklearn.feature_extraction

字典特征抽取

作用:对字典数据进行特征值化
类:sklearn.feature_extraction.DictVectorizer

DictVectorizer语法

DictVectorizer(sparse=True,…)

DictVectorizer.fit_transform(X)

  • X:字典或者包含字典的迭代器
  • 返回值:返回sparse矩阵

DictVectorizer.inverse_transform(X)

  • X:array数组或者sparse矩阵
  • 返回值:转换之前数据格式

DictVectorizer.get_feature_names()

  • 返回类别名称

DictVectorizer.transform(X)

  • 按照原先的标准转换

流程

  1. 实例化类DictVectorizer
  2. 调用fit_transform方法输入数据并转换 注意返回格式
[{'city': '北京','temperature':100}
{'city': '上海','temperature':60}
{'city': '深圳','temperature':30}]
from sklearn.feature_extraction import DictVectorizer


def dictvec():
    """
    字典数据抽取
    :return:  None
    """
    # 实例化
    dict = DictVectorizer(sparse=False)

    # 调用fit_transform
    data = dict.fit_transform([
        {'city': '北京', 'temperature': 100},
        {'city': '上海', 'temperature': 60},
        {'city': '深圳', 'temperature': 30}
    ])
    print(dict.get_feature_names())
    print(dict.inverse_transform(data))
    print(data)


if __name__ == "__main__":
    dictvec()

运行结果

['city=上海', 'city=北京', 'city=深圳', 'temperature']
[{'city=北京': 1.0, 'temperature': 100.0}, {'city=上海': 1.0, 'temperature': 60.0}, {'city=深圳': 1.0, 'temperature': 30.0}]
[[  0.   1.   0. 100.]
 [  1.   0.   0.  60.]
 [  0.   0.   1.  30.]]

字典数据抽取:把字典中一些类别数据,分别进行转换成特征

数组形式,有类别的这些特征,先要转换成字典数据

One-hot编码

img
img

文本特征抽取

作用:对文本数据进行特征值化

类:sklearn.feature_extraction.text.CountVectorizer

CountVectorizer语法

CountVectorizer(max_df=1.0,min_df=1,…) 返回词频矩阵

CountVectorizer.fit_transform(X,y)

  • X:文本或者包含文本字符串的可迭代对象
  • 返回值:返回sparse矩阵

CountVectorizer.inverse_transform(X)

  • X:array数组或者sparse矩阵
  • 返回值:转换之前数据格式

CountVectorizer.get_feature_names()

  • 返回值:单词列表

流程

  1. 实例化类CountVectorizer
  2. 调用fit_transform方法输入数据并转换
    注意返回格式,利用toarray()进行sparse矩阵转换array数组
["life is short,i like python",
"life is too long,i dislike python"]
from sklearn.feature_extraction.text import CountVectorizer

def countvex():
    """
    对文本进行特征值化
    :return: None
    """
    cv = CountVectorizer()
    data = cv.fit_transform(["人生 苦短,你 需要 Python", "人生 漫长,你 不需要 Python"])
    # 统计所有文章当中所有的词,重复的只看做一次  词的列表
    print(cv.get_feature_names())
    # 对每篇文章,在词的列表里面进行统计每个词出现的次数 单个字母不统计
    print(data.toarray())

    return None

if __name__ == "__main__":
    countvex()


['python', '不需要', '人生', '漫长', '苦短', '需要']
[[1 0 1 0 1 1]
 [1 1 1 1 0 0]]

文本特种抽取:Count

文本分类、情感分析
对于单个英文字母不统计:没有分类依据

中文需要空格才能进行抽取,所以我们需要进行分词处理

这时候就需要jieba分词,如果是Python的Web项目,jieba分词配合搜索引擎还是很常用的,跟ElasticSearch的ik分词一个效果。

案例:对三段话进行特征值化

1、今天很残酷,明天更残酷,后天很美好,
但绝对大部分是死在明天晚上,所以每个人不要放弃今天。

2、我们看到的从很远星系来的光是在几百万年之前发出的,
这样当我们看到宇宙时,我们是在看它的过去。

3、如果只用一种方式了解某样事物,你就不会真正了解它。
了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系
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 hanzivec():
    """
    中文特征值化
    :return: None
    """
    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())

    return None


if __name__ == "__main__":
    hanzivec()

运行结果

今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。 我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。 如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。
['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[0 0 1 0 0 0 2 0 0 0 0 0 1 0 1 0 0 0 0 1 1 0 2 0 1 0 2 1 0 0 0 1 1 0 0 0]
 [0 0 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 1 3 0 0 0 0 1 0 0 0 0 2 0 0 0 0 0 1 1]
 [1 1 0 0 4 3 0 0 0 0 1 1 0 1 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 2 1 0 0 1 0 0]]

词语占比

img

文章类型???

这些词语可以区分出文章的类别,但是 “所以” “我们” “明天” 这些词呢?基本上每篇文章都会出现这些词吧,所以我们需要一种方式解决这个问题。这种文本特征抽取的方式叫做 TF-IDF

TF-IDF

TF: term frequency 词的频率
IDF:逆文档频率inverse document frequency
TF = 某个词在文章中出现的次数

IDF = log(\frac{总文档数量}{该词出现的文档数量})

TF-IDF = TF(词频)\times IDF(逆文档频率)

TF-IDF的主要思想是:如果某个词或短语在一篇文章中出现的概率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

TF-IDF作用:用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。

类:sklearn.feature_extraction.text.TfidfVectorizer

TfidfVectorizer语法

TfidfVectorizer(stop_words=None,…)

  • 返回词的权重矩阵

TfidfVectorizer.fit_transform(X, y)

  • X:文本或者包含文本字符串的可迭代对象
  • 返回值:返回sparse矩阵

TfidfVectorizer.inverse_transform(X)

  • X:array数组或者sparse矩阵
  • 返回值:转换之前数据格式

TfidfVectorizer.get_feature_names()

  • 返回值:单词列表
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer


def tfidfvec():
    """
    中文特征值化
    :return: None
    """
    c1, c2, c3 = cutword()

    print(c1, c2, c3)

    tf = TfidfVectorizer()
    data = tf.fit_transform([c1, c2, c3])
    print(tf.get_feature_names())
    print(data.toarray())

    return None


if __name__ == "__main__":
    tfidfvec()

运行结果

Building prefix dict from the default dictionary ...
Loading model from cache /var/folders/0x/2nv8y02908b38mngk5wxzvhc0000gn/T/jieba.cache
Loading model cost 0.715 seconds.
Prefix dict has been built successfully.
今天 很 残酷 , 明天 更 残酷 , 后天 很 美好 , 但 绝对 大部分 是 死 在 明天 晚上 , 所以 每个 人 不要 放弃 今天 。 我们 看到 的 从 很 远 星系 来 的 光是在 几百万年 之前 发出 的 , 这样 当 我们 看到 宇宙 时 , 我们 是 在 看 它 的 过去 。 如果 只用 一种 方式 了解 某样 事物 , 你 就 不会 真正 了解 它 。 了解 事物 真正 含义 的 秘密 取决于 如何 将 其 与 我们 所 了解 的 事物 相 联系 。
['一种', '不会', '不要', '之前', '了解', '事物', '今天', '光是在', '几百万年', '发出', '取决于', '只用', '后天', '含义', '大部分', '如何', '如果', '宇宙', '我们', '所以', '放弃', '方式', '明天', '星系', '晚上', '某样', '残酷', '每个', '看到', '真正', '秘密', '绝对', '美好', '联系', '过去', '这样']
[[0.         0.         0.21821789 0.         0.         0.
  0.43643578 0.         0.         0.         0.         0.
  0.21821789 0.         0.21821789 0.         0.         0.
  0.         0.21821789 0.21821789 0.         0.43643578 0.
  0.21821789 0.         0.43643578 0.21821789 0.         0.
  0.         0.21821789 0.21821789 0.         0.         0.        ]
 [0.         0.         0.         0.2410822  0.         0.
  0.         0.2410822  0.2410822  0.2410822  0.         0.
  0.         0.         0.         0.         0.         0.2410822
  0.55004769 0.         0.         0.         0.         0.2410822
  0.         0.         0.         0.         0.48216441 0.
  0.         0.         0.         0.         0.2410822  0.2410822 ]
 [0.15698297 0.15698297 0.         0.         0.62793188 0.47094891
  0.         0.         0.         0.         0.15698297 0.15698297
  0.         0.15698297 0.         0.15698297 0.15698297 0.
  0.1193896  0.         0.         0.15698297 0.         0.
  0.         0.15698297 0.         0.         0.         0.31396594
  0.15698297 0.         0.         0.15698297 0.         0.        ]]

为什么需要TfidfVectorizer

分类机器学习算法的的重要依据

其实吧TF-IDF也是一个过时的方法,在自然语言分析里会有一些新的技术,但是这个基本的也得知道啊!


最近在做一些毛用都没有的Vue项目,纯浪费生命,影响我在机器学习的世界里当一个快乐的调包侠,her tui💦~ 啥也不是!

后来包里总带把伞,因为下雨了没有谁来送伞,也没有谁陪着淋雨。
不带伞的话,站也不是走也不是,像个可怜的笑话……
2020年8月20日 Macsen Chu

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352