为了不使得样本间的距离过大,需要对数据进行标准化处理。
而通常scikit-learn中自带的标准化包是StandardScaler,其是针对每个特征的标准化处理,将每维特征数据转化为均指为0,标准差为sigma的数据。
但是即使是对特征进行标准化,仍会有不少特征值较大,使得在高维上样本的距离较远。故而在此采用对每个数据样本进行标准化处理。
由于scikit-learn中不包含此内容,故而用python编写了个小程序进行处理。
import numpy as np
from pandas import DataFrame
dict=[[1,10,5,2,2,8],[2,3,4,5,6,7],[3,4,5,6,7,8],[4,5,6,7,8,9],[5,6,7,8,9,10]] #创建一个数据表
data=pd.DataFrame(dict)
data=np.array(data)
data1=[]
for line in data: #将数据表中的数据变为float类型
x=map(float,line)
data1.append(x)
data=data1
data=DataFrame(data)
data=np.array(data) #将其转化为数组
i=-1
j=-1
for line in data:
i+=1
mean=np.mean(line) #求解每个样本的均值
std=np.std(line)+0.0000001 #求解每个样本的房差,此处加上一个很小的数防止分母为0
for x in line:
j+=1
x=(x-mean)/std
data[i][j]=float(x)
j=-1
print data