1 数据无量纲化
from sklearn.preprocessing import MinMaxScaler data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] #不太熟悉numpy的小伙伴,能够判断data的结构吗? #如果换成表是什么样子? import pandas as pd pd.DataFrame(data) #实现归一化 scaler = MinMaxScaler() #实例化 scaler = scaler.fit(data) #fit,在这里本质是生成min(x)和max(x) result = scaler.transform(data) #通过接口导出结果 result result_ = scaler.fit_transform(data) #训练和导出结果一步达成 scaler.inverse_transform(result) #将归一化后的结果逆转 #使用MinMaxScaler的参数feature_range实现将数据归一化到[0,1]以外的范围中 data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] scaler = MinMaxScaler(feature_range=[5,10]) #依然实例化 result = scaler.fit_transform(data) #fit_transform一步导出结果 result #当X中的特征数量非常多的时候,fit会报错并表示,数据量太大了我计算不了 #此时使用partial_fit作为训练接口 #scaler = scaler.partial_fit(data)
from sklearn.preprocessing import StandardScaler data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]] scaler = StandardScaler() #实例化 scaler.fit(data) #fit,本质是生成均值和方差 scaler.mean_ #查看均值的属性mean_ scaler.var_ #查看方差的属性var_ x_std = scaler.transform(data) #通过接口导出结果 x_std.mean() #导出的结果是一个数组,用mean()查看均值 x_std.std() #用std()查看方差 scaler.fit_transform(data) #使用fit_transform(data)一步达成结果 scaler.inverse_transform(x_std) #使用inverse_transform逆转标准化
2 缺失值
import pandas as pd data = pd.read_csv(r"C:worklearnbettermicro-class week 3 PreprocessingNarrativedata.csv",index_col=0) data.head()
data.info() #填补年龄 Age = data.loc[:,"Age"].values.reshape(-1,1) #sklearn当中特征矩阵必须是二维 Age[:20] from sklearn.impute import SimpleImputer imp_mean = SimpleImputer() #实例化,默认均值填补 imp_median = SimpleImputer(strategy="median") #用中位数填补 imp_0 = SimpleImputer(strategy="constant",fill_value=0) #用0填补 imp_mean = imp_mean.fit_transform(Age) #fit_transform一步完成调取结果 imp_median = imp_median.fit_transform(Age) imp_0 = imp_0.fit_transform(Age) imp_mean[:20] imp_median[:20] imp_0[:20] #在这里我们使用中位数填补Age data.loc[:,"Age"] = imp_median data.info() #使用众数填补Embarked Embarked = data.loc[:,"Embarked"].values.reshape(-1,1) imp_mode = SimpleImputer(strategy = "most_frequent") data.loc[:,"Embarked"] = imp_mode.fit_transform(Embarked) data.info()