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 训练集特征值,测试集特征值,训练标签,测试标签
(默认随机取)
在之前的代码上,添加如下代码:
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的看下准确率怎么样。