查看数据列名: 查看数据每列信息(数目,空置和类型): 查看每列统计信息(数目、均值、方差、最小值、25%分位值、50%分位值、75%分位值和最大值): 利用Pandas库判断数据中是否有空值: 返回值为等尺寸的DataFram文件,数据类型为:bool类型(True/Flase) 通过散点图查看单一特征分布: 方差较小的情况下,Max/Min 离均值很远,则Max/Min可能为异常点 通过绘图观察,极具偏离大部分样本点的点称为异常点(需要判读该点是数据性质造成的,还是真是存在的异常点) 异常点的存在,对模型的鲁棒性存在影响 任意两列数据的单位悬殊过大 判断当前问题类型 判断当前是否需要做标签均衡 需要对字符串类别的数据做数值编码: 将已知数据设为数据集,将NaN值设为测试集,进行ML从而得到完整的数据 示例如下(使用了随机森林进行训练) 异常点 例:a1_numpy_pandaspandas3_set_value.py 设置取值范围 量纲是否需要统一 使用preproccessing库的StandardScaler类对数据进行标准化的代码如下:
使用preproccessing库的MinMaxScaler类对数据进行区间缩放的代码如下:
是否需要归一化 使用preproccessing库的Normalizer类对数据进行归一化的代码如下:
分桶离散 对定量特征二值化(对列向量处理) 定性:博主很胖,博主很瘦 定量:博主有80kg,博主有60kg 一般定性都会有相关的描述词,定量的描述都是可以用数字来量化处理 定量特征二值化的核心在于设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0,公式表达如下: 使用preproccessing库的Binarizer类对数据进行二值化的代码如下: 目的:希望数据在特定的区间才存在意义 例:a2_feature_engineering6_continue_to_bincontinue_to_discret_bucketing.py Q&A: Q: CTR预估,发现CTR预估一般都是用LR,而且特征都是离散的。为什么一定要用离散特征呢?这样做的好处在哪里? A: 在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点: 模型是使用离散特征还是连续特征,其实是一个“海量离散特征+简单模型” 同 “少量连续特征+复杂模型”的权衡。既可以离散化用线性模型,也可以用连续特征加深度学习。就看是喜欢折腾特征还是折腾模型了。通常来说,前者容易,而且可以n个人一起并行做,有成功经验;后者目前看很赞,能走多远还须拭目以待。 标签均衡 标签比例不平衡(比如1:9),处理方式如下: 有放回的重复采样,将少量数据采多
参考博客:https://blog.csdn.net/weixin_36431280/article/details/82560988 使用模型内部超参(class_weight=‘balanced’)进行控制,示例如下:
标签信息太少,将监督学习转为无监督学习的聚类问题进行 比较单特征与标签关系
经典的卡方检验是检验定性自变量对定性因变量的相关性,参考示例如下:
例子:a2_feature_engineering4_feature_selection1_filterchi2.py 使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用feature_selection库的VarianceThreshold类来选择特征的代码如下:
该系数是用来衡量两个数据集合是否在一条线上面,它用来衡量定距变量间的线性关系。 代码如下:
进行大规模实验,进行递归特征消除,返回特征选择后的数据。递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。使用feature_selection库的RFE类来选择特征的代码如下:
通过线性模型学习,比较不同特征的权值,权值越大说明特征更重要,示例如下:
将特征类别添加至树结构中,距离顶节点越进说明该特征更重要示例如下:
总结:filter适合特征比较少时使用,通过手工挑选特征;wrapper和embedded适用于自动化处理,用于多特征,但wrapper方式的运算代价远远大于embedded方式,前者需要进行多个模型训练,后者只需训练一个模型。综上所述,推荐使用embedded方式选取特征。 参考比赛老手打比赛的特征聚合经验 图像、语音、文本、网络 agg函数: gropy函数: groupby()是一个分组函数,对数据进行分组操作的过程可以概括为:split-apply-combine三步: 参考示例: 参考博客:Pandas groupby常用功能 PolynomialFeatures函数: 信息利用率低:不同的机器学习算法和模型对数据中信息的利用是不同的,之前提到在线性模型中,使用对定性特征哑编码可以达到非线性的效果。类似地,对定量变量多项式化,或者进行其他的转换,都能达到非线性的效果。 参考示例如下:
特征工程目的
特征工程思考流程
1. 搜索
print(data_train.columns)
print(data_train.info())
print(data_train.describe())
print(pd.isnull(df))
plt.scatter(X,y) #X为特征,y为标签
2. 清洗/向量化
df.dropna()
df.fillna(value=0) # NaN → 0
df = data_train.apply(lambda x:x.fillna(x.value_counts().index[0]))
df = data_train.apply(lambda x:x.mean(),axis = 1)
def set_missing_ages(df): # 把已有的数值型特征取出来丢进Random Forest Regressor中 age_df = df[['Age', 'Fare', 'Parch', 'SibSp', 'Pclass']] # 乘客分成已知年龄和未知年龄两部分 known_age = age_df[age_df.Age.notnull()].as_matrix() unknown_age = age_df[age_df.Age.isnull()].as_matrix() # y即目标年龄 y = known_age[:, 0] # X即特征属性值 X = known_age[:, 1:] # fit到RandomForestRegressor之中 rfr = RandomForestRegressor(random_state=0, n_estimators=2000, n_jobs=-1) rfr.fit(X, y) # 用得到的模型进行未知年龄结果预测 predictedAges = rfr.predict(unknown_age[:, 1::]) # 用得到的预测结果填补原缺失数据 df.loc[(df.Age.isnull()), 'Age'] = predictedAges return df, rfr
3. 标准化
df.A[df.A>70] = 0 df.A[df.A<=70] = 1
将服从正态分布的特征值转换成标准正态分布,标准化需要计算特征的均值和标准差,公式表达为:
from sklearn.preprocessing import StandardScaler #标准化,返回值为标准化后的数据 StandardScaler().fit_transform(iris.data)
区间缩放法的思路有多种,常见的一种为利用两个最值进行缩放,公式表达为:
from sklearn.preprocessing import MinMaxScaler #区间缩放,返回值为缩放到[0, 1]区间的数据 MinMaxScaler().fit_transform(iris.data)
归一化目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。规则为l2的归一化公式如下:
from sklearn.preprocessing import Normalizer #归一化,返回值为归一化后的数据 Normalizer().fit_transform(iris.data)
定性与定量区别from sklearn.preprocessing import Binarizer #二值化,阈值设置为3,返回值为二值化后的数据 Binarizer(threshold=3).fit_transform(iris.data)
# Separate majority and minority classes df_majority = df[df.Survived==0] df_minority = df[df.Survived==1] # Upsample minority class df_minority_upsampled = resample(df_minority, replace=True, # sample with replacement n_samples=(len(df_majority) - len(df_minority)), # to match majority class random_state=123) # reproducible results # Combine majority class with upsampled minority class df_upsampled = pd.concat([df_majority, df_minority_upsampled, df_minority]) print(df_upsampled.columns) print(df_upsampled['Survived'].value_counts())
Separate majority and minority classes df_majority = df[df.Survived==0] df_minority = df[df.Survived==1] # # Upsample minority class df_manority_downsampled = resample(df_majority, replace=True, # sample with replacement n_samples=len(df_minority), # to match majority class random_state=123) # reproducible results # Combine majority class with upsampled minority class df_dwonsampled = pd.concat([df_manority_downsampled, df_minority]) print(df_dwonsampled.columns) print(df_dwonsampled['Survived'].value_counts())
clf = SVC(kernel='linear', class_weight='balanced', # penalize probability=True)
4.特征选择(过拟合后看看)
from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2#选择K个最好的特征,返回选择特征后的数据 from sklearn.datasets import load_iris iris = load_iris() # k Number of top features to select. The “all” option bypasses selection, for use in a parameter search. selector = SelectKBest(chi2, k=2).fit(iris.data, iris.target) data = selector.transform(iris.data) print(data) print(selector.scores_)
from sklearn.feature_selection import VarianceThreshold #方差选择法,返回值为特征选择后的数据 #参数threshold为方差的阈值 from sklearn.datasets import load_iris iris = load_iris() #print(VarianceThreshold(threshold=3).fit_transform(iris.data)) print(iris.data[0:5]) selector = VarianceThreshold(threshold=3).fit(iris.data, iris.target) data = selector.transform(iris.data) print(data[0:5]) print(selector.variances_)
import numpy as np def pcc(X, Y): ''' Compute Pearson Correlation Coefficient. ''' # Normalise X and Y X -= X.mean() Y -= Y.mean() # Standardise X and Y X /= X.std() Y /= Y.std() # Compute mean product return np.mean(X*Y) # Using it on a random example from random import random X = np.array([random() for x in range(100)]) Y = np.array([random() for x in range(100)]) print(pcc(X, Y))
from sklearn.feature_selection import RFE from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris iris = load_iris() #参数estimator为基模型 #参数n_features_to_select为选择的特征个数7 print(iris.data[0:5]) selector = RFE(estimator=LogisticRegression(), n_features_to_select=2).fit(iris.data, iris.target) data = selector.transform(iris.data) print(data[0:5]) print(selector.ranking_)
from sklearn.svm import LinearSVC from sklearn.datasets import load_iris from sklearn.feature_selection import SelectFromModel iris = load_iris() X, y = iris.data, iris.target print(X.shape) 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)
from sklearn.feature_selection import SelectFromModel from sklearn.ensemble import GradientBoostingClassifier from sklearn.datasets import load_iris iris = load_iris() #GBDT作为基模型的特征选择 #print(SelectFromModel(GradientBoostingClassifier()).fit_transform(iris.data, iris.target)) selector = SelectFromModel(GradientBoostingClassifier()).fit(iris.data, iris.target) print(iris.data[0:5]) data = selector.transform(iris.data) print(data[0:5]) print(selector.estimator_.feature_importances_)
5.特征扩展(欠拟合后看看)
DataFrame.agg(func,axis = 0,* args,** kwargs )
import pandas as pd import numpy as np #Create a DataFrame d = { 'Name':['Alisa','Bobby','jodha','jack','raghu','Cathrine', 'Alisa','Bobby','kumar','Alisa','Alex','Cathrine'], 'Age':[26,24,23,22,23,24,26,24,22,23,24,24], 'Score':[85,63,55,74,31,77,85,63,42,62,89,77]} df = pd.DataFrame(d,columns=['Name','Age','Score']) print(df.columns.values) # key内部求和 gp = df.groupby(["Name"])["Age"].sum().reset_index() # reset_index重置index print(gp) gp.rename(columns={"Age":"sum_of_value"},inplace=True) # rename改列名 print(gp) res = pd.merge(df, gp, on=['Name'], how='inner') # default for how='inner' print(res)
from sklearn.preprocessing import PolynomialFeatures import numpy as np # a,b -> a, b, ab, a^2, b^2, 1 X = np.arange(9).reshape(3, 3) print(X[0:5]) poly = PolynomialFeatures(2) print(poly.fit_transform(X[0:5])) poly = PolynomialFeatures(interaction_only=True) print(poly.fit_transform(X))
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算