在之前的博客里一直在使用fit_transform()这一api,下面就解释一下这一API的作用:
fit_transform()的作用是:输入数据,并直接进行相应的计算。
与此同时,有两个API与之非常相似,即fit()、transform()
fit()的作用是传入数据,并计算传入数据相应的结果——传入数据的平均值等,但不进行最终数据的运算。
transform()的作用是:引用之前传入fit()的数据计算的相应结果,并进行当前传入数据的最终结果运算。此API单独使用会报错。
故fit()+transform()这两个API合在一起的作用就是fit_transform()。当两者传入的数据相同时,其输出结果与单独使用fit_transform()的结果是一样的。但是当两者传入的数据不一样时,其输出结果与单独使用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]]
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)
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.
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()的结果是一样的。
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、线性回归
具体的算法实现接下来的博文进行说明。