机器学习(七)

一、转换器与估计器

(一)、转换器

在之前的博客里一直在使用fit_transform()这一api,下面就解释一下这一API的作用:
fit_transform()的作用是:输入数据,并直接进行相应的计算。
与此同时,有两个API与之非常相似,即fit()、transform()
fit()的作用是传入数据,并计算传入数据相应的结果——传入数据的平均值等,但不进行最终数据的运算。
transform()的作用是:引用之前传入fit()的数据计算的相应结果,并进行当前传入数据的最终结果运算。此API单独使用会报错。
故fit()+transform()这两个API合在一起的作用就是fit_transform()。当两者传入的数据相同时,其输出结果与单独使用fit_transform()的结果是一样的。但是当两者传入的数据不一样时,其输出结果与单独使用fit_transform()的结果是不一样的。具体样例如下:

(1)、验证fit_transform()的作用

def fit_a():
    """
    验证fit_transform()的作用
    :return:
    """

    a = StandardScaler()
    b = a.fit_transform([[1, 2, 3],
                        [8, 9, 7],
                        [5, 7, 9]])
                        
    print(b)
    

运算结果为:

[[-1.27872403 -1.35873244 -1.33630621]
 [ 1.16247639  1.01904933  0.26726124]
 [ 0.11624764  0.33968311  1.06904497]]

(2)、验证fit()的作用

def fit_aa():
    """
    验证fit()的作用
    :return:
    """

    a = StandardScaler()
    # 对传入数据进行平均值、标准差的运算,但不计算特征的最终标准化结果
    b = a.fit([[1, 2, 3],
               [8, 9, 7],
               [5, 7, 9]])

    print(b)

运算结果为:

StandardScaler(copy=True, with_mean=True, with_std=True)

(3)、单独使用transform()

def fit_aaa():
    """
    单独使用transform()
    :return: 
    """
    
    a = StandardScaler()
    
    bb = a.transform([[1, 2, 3],
                      [8, 9, 7],
                      [5, 7, 9]])

    print(bb)

其会报错:
sklearn.exceptions.NotFittedError: This StandardScaler instance is not fitted yet. Call ‘fit’ with appropriate arguments before using this estimator.

(4)、验证fit()+transform()的作用(当两者传入的数据一样时)

def fit_aaa():
    """
    验证fit()+transform()的作用(当两者传入的数据一样时)
    :return:
    """
    
    a = StandardScaler()
    
    # 对传入数据进行平均值、标准差的运算,但不计算特征的最终标准化结果
    b = a.fit([[1, 2, 3],
                [8, 9, 7],
                [5, 7, 9]])

    print(b)
    
	# 使用之前传入fit()的数据所计算出来的平均值、标准差来进行对传入transform()数据的标准化运算
    bb = a.transform([[1, 2, 3],
                      [8, 9, 7],
                      [5, 7, 9]])

    print(bb)

运算结果为:

/StandardScaler(copy=True, with_mean=True, with_std=True)
[[-1.27872403 -1.35873244 -1.33630621]
 [ 1.16247639  1.01904933  0.26726124]
 [ 0.11624764  0.33968311  1.06904497]]

可以看出,当fit()与transform()传入的数据相同时,与使用fit_transform()的结果是一样的。

(5)、验证fit()+transform()的作用(当两者传入的数据不一样时)

def fit_aaaa():
    """
    验证fit()+transform()的作用(当两者传入的数据不一样时)
    :return:
    """
    a = StandardScaler()
    # 对传入数据进行平均值、标准差的运算,但不计算特征的最终标准化结果
    b = a.fit([[1, 2, 4],
                [8, 9, 6],
                [5, 7, 1]])

    print(b)
    # 使用之前传入fit()的数据所计算出来的平均值、标准差来进行对传入transform()数据的标准化运算
    bb = a.transform([[1, 2, 3],
                      [8, 9, 7],
                      [5, 7, 9]])

    print(bb)

运算结果为:

StandardScaler(copy=True, with_mean=True, with_std=True)
[[-1.27872403 -1.35873244 -0.32444284]
 [ 1.16247639  1.01904933  1.62221421]
 [ 0.11624764  0.33968311  2.59554274]]

为了方便比对,我只更改fit()第三列对应的数据。从上述结果我们可以看出,transform()对传入数据进行标准化时是使用的fit()所计算出来相应的参数。这也解释了为什么transform()不能单独使用的原因。因此在我们日常使用转换器时,如果是分批处理同一组数据时,为了达到统一,我们处理第一批时往往是使用fit_transform(),在处理第二批即以后时我们只需要调用transform()即可。
同时需要注意的是在处理多篇文本时不能分批采用以上的操作形式,因为多篇文章的单词往往是有多种形式的。只能分别使用fit_transform()。

二、估计器

简单来说,估计器就是实现各种算法的一些api。估计器的作用就是将训练集的数据进行传入,通过相应的算法进行模型的建立,并且传入测试集来验证模型的精准度,进而优化模型,最终生成相对理想的模型。
估计器共分为两大类,若干个算法:

(一)、分类型估计器

1、贝叶斯
2、k近邻算法
3、逻辑回归
4、决策树与随机森林

(二)、回归型估计器

1、岭回归
2、线性回归
具体的算法实现接下来的博文进行说明。

你可能感兴趣的:(机器学习基础,机器学习,python)