热门标签 | 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']

数值越大,说明越重要


推荐阅读
  • Coursera ML 机器学习
    2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 本文旨在探讨如何利用决策树算法实现对男女性别的分类。通过引入信息熵和信息增益的概念,结合具体的数据集,详细介绍了决策树的构建过程,并展示了其在实际应用中的效果。 ... [详细]
  • 强人工智能时代,区块链的角色与前景
    随着强人工智能的崛起,区块链技术在新的技术生态中扮演着怎样的角色?本文探讨了区块链与强人工智能之间的互补关系及其在未来技术发展中的重要性。 ... [详细]
  • 深入浅出TensorFlow数据读写机制
    本文详细介绍TensorFlow中的数据读写操作,包括TFRecord文件的创建与读取,以及数据集(dataset)的相关概念和使用方法。 ... [详细]
  • 2017年人工智能领域的十大里程碑事件回顾
    随着2018年的临近,我们一同回顾过去一年中人工智能领域的重要进展。这一年,无论是政策层面的支持,还是技术上的突破,都显示了人工智能发展的迅猛势头。以下是精选的2017年人工智能领域最具影响力的事件。 ... [详细]
  • 吴恩达推出TensorFlow实践课程,Python基础即可入门,四个月掌握核心技能
    量子位报道,deeplearning.ai最新发布了TensorFlow实践课程,适合希望使用TensorFlow开发AI应用的学习者。该课程涵盖机器学习模型构建、图像识别、自然语言处理及时间序列预测等多个方面。 ... [详细]
  • 本文探讨了图像标签的多种分类场景及其在以图搜图技术中的应用,涵盖了从基础理论到实际项目实施的全面解析。 ... [详细]
  • 大数据时代的机器学习:人工特征工程与线性模型的局限
    本文探讨了在大数据背景下,人工特征工程与线性模型的应用及其局限性。随着数据量的激增和技术的进步,传统的特征工程方法面临挑战,文章提出了未来发展的可能方向。 ... [详细]
  • 目录一、salt-job管理#job存放数据目录#缓存时间设置#Others二、returns模块配置job数据入库#配置returns返回值信息#mysql安全设置#创建模块相关 ... [详细]
  • 本文介绍如何使用MFC和ADO技术调用SQL Server中的存储过程,以查询指定小区在特定时间段内的通话统计数据。通过用户界面选择小区ID、开始时间和结束时间,系统将计算并展示小时级的通话量、拥塞率及半速率通话比例。 ... [详细]
  • 实用正则表达式有哪些
    小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
  • 本文探讨了如何通过预处理器开关选择不同的类实现,并解决在特定情况下遇到的链接器错误。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
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社区 版权所有