人工智能学习(22 机器学习:05-机器学习概述)

论坛 期权论坛 脚本     
匿名技术用户   2020-12-23 06:59   30   0

01_复习

我们先对前面的知识进行一个复习,之前讲解了特征工程,其主要包括:
1.特征抽取:把字符转化为数值
2.预处理:归一化,标准化
3.数据降维:特征选择(Filter:过滤式-利用方差),主成分分析(PDA)

还讲解了算法的分离,其主要:监督学习,非监督学习。区别在于是否有目标值。

监督学习是我们的重点,其中有两大类型,分别针对不同的数据。

监督学习:
 分类  (针对离散型数据:目标值):  k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归、神经网络
 回归  (针对连续型数据:目标值): 线性回归、岭回归
 标注  :隐马尔可夫模型     (不做要求)
 
无监督学习:
 聚类    k-means

02_数据的划分和介绍

机器学习一般的数据集会划分为两个部分:
训练数据:用于训练,构建模型
测试数据:在模型检验时使用,用于评估模型是否有效

当我们拿到数据之后,我们的数据分为训练集和测试集。训练集是给我们建立模型使用的,测试集是对我们建立模型进行评估时给来使用的。模型(算法加数据)的建立,实质就是对训练系数据规律的寻找。
一般来说训练集的数据比测试机的数据所占比例更高,一般有以下几种取值方式:
在这里插入图片描述
75%是使用最多的一种方式。对于数据集的划分,我们有使用的API,不需要我们手动的随机抽取。

sklearn.model_selection.train_test_split

我们暂时不介绍如何使用,我们先介绍sklean中数据集相关的API(可以下载数据集)。

sklearn.datasets
 加载获取流行数据集
 
 datasets.load_*()
  获取小规模数据集,数据包含在datasets里
 
 datasets.fetch_*(data_home=None)
  获取大规模数据集,需要从网络上下载,函
  数的第一个参数是data_home,表示数据集
  下载的目录,默认是 ~/scikit_learn_data/

既然能下载数据,那么我们可定需要知道其数据的格式:

load*和fetch*返回的数据类型datasets.base.Bunch(字典格式)

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

我们先来看看sklearn中,分类数据集有哪些(例子):
在这里插入图片描述
可以就看到,我们使用sklearn.datasets.load_iris()与sklearn.datasets.load_digits()可以分别获得两个分类的数据集。则两个数据集后续我们并不会使用,这里只是为大家演示一下,我们编写代码如下:

from sklearn.datasets import load_iris
li = load_iris()
print(li.data)
print(li.target)

打印信息就不进行复制了,有兴趣的同学可以认真查看一下,其上是离散型的数据。现在我们已经获取到了数据,接下来我们讲解数据集的分割(分割成训练集和测试集),下,其API:

sklearn.model_selection.train_test_split(*arrays, **options)

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

return  训练集特征值,测试集特征值,训练标签,测试标签
(默认随机取) 

在之前的代码上,添加如下代码:

# 返回值:训练集train:x_train,y_train   测试集 test:x_text,y_test
x_train,x_test,y_train,y_test = train_test_split(li.data, li.target, test_size=0.25)

print("训练集特征值和目标值:",x_train,y_train)
print("测试集特征值和目标值:",x_test,y_test)

同样,这里的打印信息也粘贴了。我们在来看一种用于分类的大数据集。

sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
 subset: 'train'或者'test','all',可选,选择要加载的数据集.
 训练集的“训练”,测试集的“测试”,两者的“全部”
 
datasets.clear_data_home(data_home=None)
清除目录下的数据

我们编写代码如下:

news = fetch_20newsgroups(subset="all")
print(news.data)
print(news.target)

fetch_20newsgroups下载的是新闻数据,所以我们打印出来可以都是文章。在最后我们可以看到target打印出来的一组数字,其代表的就是文章属于的类别如:[10 3 17 … 3 1 7]。

上面的都是分类的数据,现在我们来看看那回归的数据。下面是我们收集一些回归数据的API,即对应的数据介绍:
在这里插入图片描述
我们编写代码如下:

bl = load_boston()
print(bl.DESCR)
print(bl.data)
print(bl.target)

运行之后我们可以看到目标值,代表的是房价,可以是一些连续的数据。

03_转换器与估计器

下面我们来讲解一下转换器和预估器。想一下之前做的特征工程的步骤?

1、实例化 (实例化的是一个转换器类(Transformer))
2、调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)
在这里插入图片描述
值需要如上两步,就能对数据进行转换。与fit_transform对应的还有fit(),tranform()。
fit_transform:输入数据,直接转换,其作用相当于fit()+fit_transform()
fit():输入数据,但是并没有进行转换(做一些简单的计算,如先计算出平局值,标注差等)
tranform():进行数据的转化
我们编写代码如下:

from sklearn.preprocessing import StandardScaler

s = StandardScaler()
data = s.fit_transform([[1,2,3],[4,5,6]])
print(data)

ss = StandardScaler()
ss.fit([[1,2,3],[4,5,6]])
data = ss.transform([[1,2,3],[4,5,6]])
print(data)

ss.fit([[2,2,8],[7,9,1]])
data = ss.transform([[1,2,3],[4,5,6]])
print(data)

运行结果如下:

[[-1. -1. -1.]
 [ 1.  1.  1.]]
 
[[-1. -1. -1.]
 [ 1.  1.  1.]]
 
[[-1.4        -1.         -0.42857143]
 [-0.2        -0.14285714  0.42857143]]

我们可以发现fit_transform与fit + transform的效果是一样的。这里后面出现结果不一样的原因是,fit先计算一部分,然后transform再计算一部分。这个就是转化器。下面我们讲解估计器。

sklearn机器学习算法的实现-估计器
在sklearn中,估计器(estimator)是一个重要的角色,分类器和回归器都属于estimator(估算),是一类实现了算法的API

1、用于分类的估计器:
sklearn.neighbors k-近邻算法
sklearn.naive_bayes      贝叶斯
sklearn.linear_model.LogisticRegression     逻辑回归

2、用于回归的估计器:
sklearn.linear_model.LinearRegression     线性回归
sklearn.linear_model.Ridge      岭回归 

如上图,我们首先使用训练集建立模型,训练集包含了x_tran与y_train, 然后我们调用fit_transform。当我们建立模型之后,我们肯定还需要知道我们这个模型到底是好是坏,这时候我们就需要到估算器,调用predict把测试集的数据输入进去,然后使用score的看下准确率怎么样。

在这里插入图片描述

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP