热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python机器学习(1)——机器学习概述,数据集的基本使用

文章目录一、人工智能概述二、什么是机器学习三、特征工程3.1数据集3.2特征工程一、人工智能概述1.机器学习是人工智能的一个实现途径2.深度学习是由机器学习的一个方法ÿ

文章目录

    • 一、人工智能概述
    • 二、什么是机器学习
    • 三、特征工程
      • 3.1 数据集
      • 3.2 特征工程


一、人工智能概述

1.机器学习是人工智能的一个实现途径

2.深度学习是由机器学习的一个方法(人工神经网络)发展而来的

3.机器学习,深度学习能做什么
传统预测,图像识别,自然语言处理

二、什么是机器学习

1.机器学习就是从数据中自动分析获取模型,并利用模型对未知数据进行预测

2.数据集构成

数据集由特征值和目标值构成,每一行数据可以称为样本

3.机器学习算法分类

(1)监督学习:

目标值:区分类别—分类问题(区分猫和狗)

  • k近邻算法,贝叶斯分类,决策树与随机森林,逻辑回归

目标值:连续性数据—回归问题(预测房价)

  • 线性回归,岭回归

(2)无监督学习:

  • 目标值:无—无监督学习
  • 聚类:k-means

4.机器学习开发流程

(1)获取数据
(2)数据处理(缺失值等)
(3)特征工程(进一步处理,处理为特征值)
(4)机器学习算法训练—模型
(5)模型评估

三、特征工程


3.1 数据集

1.可用数据集

公司内部,政府等有可用数据集
在学习阶段可用的数据集是:
1)sklearn
2)kaggle
3)UCI(加州大学欧文分校收集的数据集)

我使用的是sklearn数据集,在下载完成之后可使用

import sklearn

看是否下载成功

2.使用sklearn数据集

import sklearn.datasets
加载获取流行数据集

(1)获取小规模数据集使用load_()
datasets.load_
()
(2)获取大规模数据集使用fetch_()
datasets.fetch_
(data_home=None)
需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/

3.sklearn中的小数据集

(1)鸢尾花数据集
调用sklearn.datasets.load_iris()方法,返回鸢尾花数据集

(2)波士顿房价数据集
调用sklearn.datasets.load_boston()方法,返回波士顿房价数据集

4.数据集的返回值

使用load和fetch方法返回的数据集的数据类型是datasets.base.Bunch(字典格式)

该字典的key有以下几个

  • data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
  • target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
  • DESCR:数据描述
  • feature_names:特征名,新闻数据,手写数字(回归数据集没有)
  • target_names:标签名

由于返回的数据集是字典类型,因此可以通过dict[key]访问其中的value
也可以通过"."的方式访问其中的属性值

例:调用sklearn中的鸢尾花数据集并访问其中的属性

'''
本例演示sklearn数据集的基本使用
'''

# 从sklearn中导入鸢尾花数据集
from sklearn.datasets import load_iris
def show():# 获取鸢尾花数据集iris = load_iris()# 查看鸢尾花数据集print("鸢尾花数据集:")print(iris)print('鸢尾花数据集描述:')print(iris['DESCR'])print('鸢尾花特征值的名字')print(iris.feature_names)print('查看特征值')print(iris.data)# 查看数组有几行几列print(iris.data.shape)
show()

5.数据集的划分

获取的数据不全部用来训练,因此获取到的全部数据分为训练集和测试集

机器学习中的数据集一般会分为两个部分

  1. 训练集:用于训练,构建模型
  2. 测试集:在模型检验时使用,用于评估模型是否有效

划分的比例:
训练集:70%~80%
测试集:20%~30%

在sklearn中实现数据集的划分

数据集划分使用的方法:

sklearn.model_selection.train_test_split(arrays, *options)

x 数据集的特征值
y 数据集的标签值
test_size 测试集的大小,一般为float
random_state 随机数种子,不同的种子会造成不同的随机采样结果。相同的种子采样结果相同。
return 测试集特征训练集特征值值,训练标签,测试标签(默认随机取)

# 数据集的划分
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 获取鸢尾花数据集
iris = load_iris()
# 对数据集进行划分
x_train, x_test, y_train, y_test = train_test_split(iris.data,iris.target,test_size=0.3,random_state=22)
# 输出训练集和测试集
print('x数据集的特征值')
print(x_train)
print(x_train.shape)
print('y数据集的特征值')
print(y_train)
print(y_train.shape)
print('x训练集的特征值')
print(x_test)
print(x_test.shape)
print('y测试集的特征值')
print(y_test)
print(y_test.shape)

3.2 特征工程

1.为什么需要特征工程?
数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已。特征工程可以帮助我们逼近这个上限

2.什么是特征工程?
特征工程是使用专业背景知识和技巧处理数据,使得特征能在机器学习算法上发挥更好的作用的过程。
特征工程可以影响机器学习的效果

3.特征工程包含以下几个内容

  • 特征抽取
  • 特征预处理
  • 特征降维

4.什么是特征提取?
特征提取是将任意数据(如文本或图像)转换为可用于机器学习的数字特征

三种特征抽取

  • 字典特征提取
  • 文本特征提取
  • 图像特征提取

在机器学习中主要学习字典特征提取和文本特征提取,在深度学习中学习图像特征提取

5.在sklearn中实现字典特征提取的类

sklearn.feature_extraction

1)字典特征抽取

sklearn.feature_extraction.DictVectorizer(sparse=True,)

DictVectorizer是一个转换器类,里面有相应的方法,sparse=True表示默认返回稀疏矩阵

  • DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回稀疏矩阵(Sparse)
  • DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
  • DictVectorizer.get_feature_names() 返回类别名称

一个小例子

'''
本例演示字典特征抽取
'''

# 1.导包
from sklearn.feature_extraction import DictVectorizer
# 2.引入数据
data = [{'city': '济南','PM2.5':300},{'city': '天津','PM2.5':60},{'city': '重庆','PM2.5':50}]
# 3.实例化转换器类
transfer1 = DictVectorizer()
# 4.调用fit_transform(dict)
data1 = transfer1.fit_transform(data)
# 打印data1
print('data1 =')
'''
这里打印输出以下的稀疏矩阵,稀疏矩阵的特点是将矩阵中非0的值打印出来
(0, 0) 300.0
(0, 2) 1.0
(1, 0) 60.0
(1, 1) 1.0
(2, 0) 50.0
(2, 3) 1.0
'''

print(data1)
# 接下来打印非稀疏矩阵
transfer2 = DictVectorizer(sparse=False)
data2 = transfer2.fit_transform(data)
print('data2 = ')
'''
打印输出矩阵,0表示无数据,1表示有数据
[[300. 0. 1. 0.][ 60. 1. 0. 0.][ 50. 0. 0. 1.]]
'''

print(data2)
# 数据矩阵对应的特征名
print('特征名字:')
# ['PM2.5', 'city=天津', 'city=济南', 'city=重庆']
print(transfer2.get_feature_names())

2)文本特征抽取

在一篇文章中,我们可以通过单词,字母,短语等作为特征提取的条件

可以使用sklearn库中的如下方法

sklearn.feature_extraction.text.CountVectorizer(stop_words=[])

stop_words是停用词,如果我们认为某些词不太重要,可以将其写入数组并传入参数,那么系统就会自动忽略这些词的统计

可以对文本进行特征值化,返回词频矩阵

  • CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
  • CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格
  • CountVectorizer.get_feature_names() 返回值:单词列表

可以使用toarray()方法将sparse矩阵转换为二维数组的形式

'''
本例演示文本特征抽取
'''

# 1.导包
from sklearn.feature_extraction.text import CountVectorizer# 2.数据
data = ["life is is short,i is is like python",
"life is too long python,i dislike dislike python"]# 3.实例化一个转换器
trasfer = CountVectorizer()
# 4.调用fit_transform方法
newData = trasfer.fit_transform(data)
# 5.打印输出
print("newData:")
print(newData.toarray())
# 打印特征名字
print(trasfer.get_feature_names())

输出结果

newData:
[[0 4 1 1 0 1 1 0][2 1 1 0 1 2 0 1]]['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

3)中文文本特征提取

由于中文的语言特性,字与字之间不想英文的词与词之间那样有空格,因此如果直接使用上面的特征提取方式,会出现一句话合为一个词的效果,不符合我们的要求

这里使用了中文分词库jieba
首先需要安装jieba库,可以直接在PyCharm里安装
在这里插入图片描述

'''
本例演示中文文本特征抽取
'''

# 1.导包
from sklearn.feature_extraction.text import CountVectorizer
import jieba
# 中文分词的方法
def devideWord(text):'''进行中文分词:"我爱北京天安门"->”我 爱 北京 天安门“:param text::return:'''text = " ".join(list(jieba.cut(text)))return text
# 2.数据
data = ["在这个世界上,一星陨落,黯淡不了星空灿烂,一花凋零,荒芜不了整个春天。",
"今天我出去玩了,玩得很开心"]
data_new = []
# 3.使用中文分词
for text in data:data_new.append(devideWord(text))
# 4.打印输出分词的结果
print(data_new)
# 5.对分词之后的中文文本进行特征提取
trasfer = CountVectorizer()
newData = trasfer.fit_transform(data_new
print("newData:")
print(newData.toarray())
# 打印特征名字
print(trasfer.get_feature_names())

输出结果

['在 这个 世界 上 , 一星 陨落 , 黯淡 不了 星空 灿烂 , 一花 凋零 , 荒芜 不了 整个 春天 。', '今天 我 出去玩 了 , 玩得 很 开心']
newData:
[[1 1 2 1 0 1 0 0 1 1 1 1 0 1 1 1 1][0 0 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0]]
['一星', '一花', '不了', '世界', '今天', '凋零', '出去玩', '开心', '整个', '星空', '春天', '灿烂', '玩得', '荒芜', '这个', '陨落', '黯淡']

4)Tf-idf文本特征抽取,TfidfVectorizer

使用这种方法,可以找出在一个文本中哪一个词更重要,即找到关键词

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

  • Tf:词频(term frequency):一个词在文章中出现的频率(出现次数 / 总词数)
  • idf:逆向文档频率(inverse document frequency):是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到

某个词的Tf-idf = Tf * idf

API文档

可以使用sklearn库中的如下方法

sklearn.feature_extraction.text.TfidfVectorizer(stop_words=[])

可以对文本进行特征值化,返回词频矩阵

  • TfidfVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
  • TfidfVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格
  • TfidfVectorizer.get_feature_names() 返回值:单词列表

可以使用toarray()方法将sparse矩阵转换为二维数组的形式

'''
本例演示Tfidf文本特征抽取
'''

# 1.导包
from sklearn.feature_extraction.text import TfidfVectorizer
# 2.数据
data = ["life is is short,i is is like python",
"life is too long python,i dislike dislike python"]# 3.实例化一个转换器
trasfer = TfidfVectorizer()
# 4.调用fit_transform方法
newData = trasfer.fit_transform(data)
# 5.打印输出
print("newData:")
print(newData.toarray())
# 打印特征名字
print(trasfer.get_feature_names())

输出结果

newData:
[[0. 0.85376069 0.21344017 0.29998272 0. 0.213440170.29998272 0. ][0.66528343 0.23667732 0.23667732 0. 0.33264172 0.473354640. 0.33264172]]
['dislike', 'is', 'life', 'like', 'long', 'python', 'short', 'too']

数值越大,说明越重要


推荐阅读
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • TensorFlow入门上
    前置准备在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。神经网络初探​chrer.com也可以直接在我博客阅读Te ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 分享篇:第十届“泰迪杯”数据挖掘挑战赛农田害虫图像识别(特等奖)一
    1.1赛题背景昆虫的种类浩如烟海,农田常见的昆虫是人工生态系统的重要组成部分。分辨益虫和害虫,保留益虫,消灭害虫,对于减轻害 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 读手语图像识别论文笔记2
    文章目录一、前言二、笔记1.名词解释2.流程分析上一篇快速门:读手语图像识别论文笔记1(手语识别背景和方法)一、前言一句:“做完了&#x ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 2017亚马逊人工智能奖公布:他们的AI有什么不同?
    事实上,在我们周围,“人工智能”让一切都变得更“智能”极具讽刺意味。随着人类与机器智能之间的界限变得模糊,我们的世界正在变成一个机器 ... [详细]
  • Two Sigma人均22万英镑~
    近期原创文章: ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • Word2vec,Fasttext,Glove,Elmo,Bert,Flairpre-trainWordEmbedding源码数据Github网址:词向量预训练实现Githubf ... [详细]
  • 深度学习与神经网络——邱锡鹏
    深度学习与神经网络——邱锡鹏-一、绪论人工智能的一个子领域神经网络:一种以(人工))神经元为基本单元的模型深度学习:一类机器学习问题,主要解决贡献度分配问题知识结构:路线图:顶 ... [详细]
  • 鄂维南:从数学角度,理解机器学习的「黑魔法」,并应用于更广泛的科学问题...
    作者|Hertz来源|科学智能AISI北京时间2022年7月8日晚上22:30,鄂维南院士在2022年的国际数学家大会上作一小时大会报告(plenarytalk)。今 ... [详细]
author-avatar
mobiledu2502873611
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有