数据分析第二天
数据标准化
1、将数据的取值缩放到一定范围内
2、减少不同属性间因不同量级造成的权重问题
3、数据量级过大会导致收敛的速度下降
from sklearn.preprocessing import StandardScaler,MinMaxScaler,RobustScaler
#z-score标准化(均值为 0,方差为1)
zscore = StandardScaler()
df_zscore = zscore.fit_transform(df)
#min-max标准化(取值为[0,1])
minMax = MinMaxScaler()
df_minMax= minMax.fit_transform(df)
#在算法预测时,采用训练集得到的参数进行test 即先fit,transform
数据正则化
数据正则化是将样本的某个范数缩放到单位1。(该方法主要应用于文本分类和聚类中)
区别:正则化的过程是针对单个样本(行数据),
标准化是针对单个属性的(属性上的所有样本)列数据
from sklearn.preprocessing import normalize
X = [[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]]
X_normalized = normalize(X, norm='l2')
#训练集和测试集上用normalize.fit(X), normalizer.transform(X)
特征选择
选择出relevant_feature
处理高维数据的两大主流技术:特征选择与降维
特征选择原理
方法:
1、产生一个候选子集,评价出它的好坏。
2、基于评价结果产生下一个候选子集,再评价其好坏。
3、持续进行,直至无法找到更好的后续子集为止
子集搜索
向前搜索:给定集合中每一个元素作为起始子集,选出最好的,增加一个元素,选出最好的,且比一个元素的好,持续进行,直到在增加比远来的不好停止
向后搜索:如果从完整的特征集合开始,去掉一个无关特征
子集评价
信息增益
常见的特征选择方法大致可分为三类:过滤式filter、包裹式wrapper、嵌入式embedding
filter
Filter方法是通过特征(列)和标签(列)的相关性来衡量特征所携带的信息。常用的评价相关性的标准有:Pearson相关系数,Gini-index(基尼指数),IG(信息增益)等。
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
X, y = load_iris(return_X_y=True)
X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
wrapper
直接针对特定学习器进行优化
from sklearn.feature_selection import RFE,RFECV
#RFE
iris=load_iris()
X=iris.data
Y=iris.target
estimator=LinearSVC() selector=RFE(estimator=estimator,n_features_to_select=2)
print("Before transform,X=",X)
selector.fit(X,Y)
selector.transform(X)
print("After transform,X=",X)
print("Ranking %s"%selector.ranking_)
#RFECV
iris=load_iris()
X=iris.data
Y=iris.target
estimator=LinearSVC()
selector=RFECV(estimator=estimator,cv=3)
selector.fit(X,Y)
print("Grid Scores %s"%selector.grid_scores_)
embedding
嵌入式特征选择:是指特征选择与学习器训练过程放在一起
常见的有
在Lasso中, 参数控制了稀疏性:
如果 λ越小,则稀疏性越小,则被选择的特征越多。
如果 λ越大,则稀疏性越大,则被选择的特征越少。
在SVM和logistic-regression中,参数C控制了稀疏性
如果C越小,则稀疏性越大,则被选择的特征越少。
如果C越大,则稀疏性越小,则被选择的特征越多。
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
X, y = load_iris(return_X_y=True)
print(X.shape) #(150, 4)
lsvc = LinearSVC(C=0.01, penalty="l1",dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)
print(X_new.shape) ##(150, 3)