赞
踩
1、数据挖掘五大流程:
1、定义:我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布
的需求,这种需求统称为将数据“无量纲化”。
注意:树的算法不需要无量纲化,树可以将任意数据处理的非常好。
2、分类:线性和非线性。
线性的无量纲化包括中心化和缩放处理。
3、sklearn中的函数
(1)preprocessing.MinMaxScaler
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
data=[[-1,2],
[-0.5,6]
,[0,10]
,[1,18]]
pd.DataFrame(data)
#归一化1
scaler=MinMaxScaler()#实例化
scaler=scaler.fit(data)#生成min(x)和max(x)
result=scaler.transform(data)#通过接口导出结果
print(result)
result_=scaler.fit_transform(data)#一步达成
scaler.inverse_transform(result)#将归一化的结果逆转
#归一化2
scaler1=MinMaxScaler(feature_range=[5,10])
result1=scaler1.fit_transform(data)
print(result1)
(2)preprocessing.StandardScaler
#标准化
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逆转标准化
(3)如何选择标准化和归一化
标准化:在PCA,聚类,逻辑回归,支持向量机,神经网络。
归一化:对异常值敏感,数字图像处理中量化像素强度
(4)其他数据无量纲方法
在这里我们使用titanic的部分数据进行。
1、读入数据
import pandas as pd
data=pd.read_csv("E:/21国赛/Titannic/Narrativedata.csv",index_col=0)
data.info()
data.head()
年龄和舱门具有缺失值。
2、填补缺失值:impute.SimpleImputer
(1)格式:
class sklearn.impute.SimpleImputer (missing_values=nan, strategy=’mean’, fill_value=None, verbose=0,
copy=True)
(2)参数
参数 | 含义 |
---|---|
missing_values | 告诉SimpleImputer,数据中的缺失值长什么样,默认空值np.nan |
strategy | 我们填补缺失值的策略,默认均值。输入“mean”使用均值填补(仅对数值型特征可用;输入“median"用中值填补(仅对数值型特征可用;输入"most_frequent”用众数填补(对数值型和字符型特征都可用);输入“constant"表示请参考参数“fill_value"中的值(对数值型和字符型特征都可用 |
fill_value | 当参数startegy为”constant"的时候可用,可输入字符串或数字表示要填充的值,常用0 |
copy | 默认为True,将创建特征矩阵的副本,反之则会将缺失值填补到原本的特征矩阵中去。 |
#填补年龄
Age=data.loc[:,"Age"].values.reshape(-1,1)
#print(Age[:20])
imp_mean=SimpleImputer()#均值
imp_median=SimpleImputer(strategy='median')#中位数
imp_0=SimpleImputer(strategy='constant',fill_value=0)#0
imp_mean=imp_mean.fit_transform(Age)
imp_median=imp_median.fit_transform(Age)
imp_0=imp_0.fit_transform(Age)
data.loc[:,"Age"]=imp_median
data.info()
输出结果:
同理对Embarked进行填补
Embarked=data.loc[:,"Embarked"].values.reshape(-1,1)
imp_mode=SimpleImputer(strategy='most_frequent')
imp_mode=imp_mode.fit_transform(Embarked)
data.loc[:,"Embarked"]=imp_mode
data.info()
输出结果:
3、处理分类特征:编码和哑变量
编码:将文字型数据转换为数值型。
preprocessing.LabelEncoder:标签专用,能够将分类转换为分类数值
#分类变量
y=data.iloc[:,-1]
le=LabelEncoder()
le=le.fit(y)#导入数据
label=le.transform(y)
le.classes_
label
#le.fit_transform(y) 一步到位
data.iloc[:,-1] = label
输出结果
preprocessing.OrdinalEncoder:特征专用,能够将分类特征转换为分类数值
#分类变量:专为特征分类
from sklearn.preprocessing import OrdinalEncoder
data_=data.copy()
data_.head()
OrdinalEncoder().fit(data_.iloc[:,1:-1]).categories_
data_.iloc[:,1:-1]=OrdinalEncoder().fit_transform(data_.iloc[:,1:-1])
print(data_.head())
preprocessing.OneHotEncoder:独热编码,创建哑变量。
三种分类数据:
#独热编码
from sklearn.preprocessing import OneHotEncoder
X=data.iloc[:,1:-1]
enc=OneHotEncoder(categories='auto').fit(X)
result=enc.transform(X).toarray()
#print(result)
print(enc.get_feature_names())
#合并
newdata=pd.concat([data,pd.DataFrame(result)],axis=1)
print(newdata.head())
newdata.drop(["Sex","Embarked"],axis=1,inplace=True)
newdata.columns=["Age","Survived","Female","Male","Embarked_C","Embarked_Q","Embarked_S"]
print(newdata.head())
输出结果:
总结:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。