基于欧式距离分类问题的数据标准化处理

机器学习中的分类模型,有一些是基于欧式距离的,如K-means模型。当样本的特征较多时,
即使上万的数据分布在较高维数空间中,其样本仍会显得比较稀疏。

为了不使得样本间的距离过大,需要对数据进行标准化处理。

而通常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


你可能感兴趣的:(基于欧式距离分类问题的数据标准化处理)