接上文,下载iris数据集之后,需要对数据进行处理。这里只需要对数据进行标准化处理
min-max标准化
数据标准化处理是为了把数据分到一个特定区间,以便更好分析,这里不细说各方法的优缺点。min-max特别简单,但新加入值时可能会需要重新训练模型
# MinmaxScalar标准化
import numpy as np
from sklearn.preprocessing import MinMaxScaler
MinMaxScalar = MinMaxScaler()
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print("x:", x)
MinMaxScalar.fit(x)
y = MinMaxScalar.transform(x)
print("标准化之后的x值:", x)
print("标准化之后的y值:", y)
需要说明的是,min-max标准化是对每一列求得min和max以及平均值、方差等内容
fit对数据进行"拟合",以求得min、max等内容
transform再对每个数据进行求值
当然这里我们也可以直接用fit_transform把两个步骤合为一步,那为什么不全部都用这种方式呢?
实际上我们还有训练集、测试集之分,一般都是对训练集进行fit,然后得到的这个MinMaxScalar再去transform训练集,以及测试集
StandardScaler标准化
# StandardScaler标准化
import numpy as np
from sklearn.preprocessing import StandardScaler
StandardScaler = StandardScaler()
x = np.arange(9).reshape(3, 3)
print("x:", x)
y = StandardScaler.fit_transform(x)
print("标准化之后的x值:", x)
print("标准化之后的y值:", y)
这里直接使用的fit_transform,但实际使用时,最好fit和transform分开
使用了arange函数并且用reshape把数组分成3行3列
Normalizer
# Normalizer标准化
import numpy as np
from sklearn.preprocessing import Normalizer
Normalizer = Normalizer()
x = np.arange(9).reshape(3, 3)
print("x:", x)
y = Normalizer.fit_transform(x)
print("标准化之后的x值:", x)
print("标准化之后的y值:", y)
Binarizer
# Binarizer标准化
import numpy as np
from sklearn.preprocessing import Binarizer
Bz = Binarizer()
x = np.arange(9).reshape(3, 3)
print("x:", x)
y = Bz.fit_transform(x)
print("标准化之后的x值:", x)
print("标准化之后的y值:", y)
等等,这里结果和我们想象的不一样,标准化的结果好像不可控
其实,Binarizer是将所有数据都分成0或1,如果不指定阈值,那么默认为0.一般Binarizer是用于小数
加上threshold之后的结果
# Binarizer标准化
import numpy as np
from sklearn.preprocessing import Binarizer
Bz = Binarizer(threshold=3)
x = np.arange(9).reshape(3, 3)
print("x:", x)
y = Bz.fit_transform(x)
print("标准化之后的x值:", x)
print("标准化之后的y值:", y)
LabelEncoder标准化
对于不用的文本,使用LabelEncoder将其标准化,如将"中国", “美国”, “印度”, "非洲"进行标准化
# LabelEncoder标准化
import numpy as np
from sklearn.preprocessing import LabelEncoder
LE = LabelEncoder()
x = LE.fit_transform(["中国", "美国", "印度", "非洲"])
print("标准化之后的x值:", x)
OneHot标准化
# OneHot标准化
import numpy as np
from sklearn.preprocessing import OneHotEncoder
OE = OneHotEncoder()
y = ["中国", "美国", "印度", "非洲"]
print(np.array(y).reshape(-1, 1))
x = OE.fit_transform(np.array(y).reshape(-1, 1))
print("标准化之后的x值:", x)
小结,数据标准化方法都很类似,具体是要理解具体问题,然后在使用对应的数据标准化方法