开通VIP,畅享免费电子书等14项超值服
首页
好书
留言交流
下载APP
联系客服
2023.02.27湖南
对于记录重复数据,一般采用直接删除方式:
subset:用来指定特定的列,默认所有列1.1.2特征重复:一个或多个特征名不同,但是数据完全一样pandas提供了一个corr函数可以进行相似度的检测,当相似度为1,表示两列数据一模一样。
#dataframe查看某列缺省值和非缺省值的数量data['temp'].isnull().sum()data['temp'].notnull().sum()1.2.1删除法:当缺省的个数非常少时可以采用直接删除的方式
importnumpyasnpfromscipy.interpolateimportinterp1dx=np.array([1,2,3,4,5,8,9,10])y=np.array([2,8,18,32,50,128,162,200])linearinsert=interp1d(x,y,kind='linear')x2=[6,7]#需要插值的x2值不能超过x的范围y2=linearinsert(x2)print(y2)[76.102.]1.3异常值:数据处理中,异常值是指偏离明显的数值,有时候也成为离群点,异常值在进行数据分析的时候,分析结果容易产生偏差甚至错误,对于异常值,一般采用删除的方法。3δ原则和箱型图用于做初步的数据探查,如果经过检验数据服从正态分布,就使用3δ原则,否则使用箱型图。1.3.13δ原则如果数据服从正态分布,在3σ原则下,异常值被定义为组测定值中与平均值的偏差超过三倍标准差的值。在正态分布下,距离平均值3σ之外的值出现的概率为P(|x-μ|>3σ)<=0.003,属于极个别的概率事件。如果数据不服从正态分布,也可以远离平均值的多少倍标准差来描述这个原则有个前提条件:数据需要服从正态分布。
数据标准化主要是应对特征向量中数据很分散的情况,防止小数据被大数据(绝对值)吞并的情况。
另外,数据标准化也有加速训练,防止梯度爆炸的作用。
为什么要标准化/归一化?
提升模型精度:标准化/归一化后,不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
加速模型收敛:标准化/归一化后,最优解的寻优过程明显会变得平缓,更容易正确的收敛到最优解。
如下图所示:左图表示未经过数据标准化处理的loss更新函数,右图表示经过数据标准化后的loss更新图。可见经过标准化后的数据更容易迭代到最优点,而且收敛更快。
哪些机器学习算法需要标准化和归一化:
1)需要使用梯度下降和计算距离的模型要做归一化,因为不做归一化会使收敛的路径程z字型下降,导致收敛路径太慢,而且不容易找到最优解,归一化之后加快了梯度下降求最优解的速度,并有可能提高精度。比如说线性回归、逻辑回归、adaboost、xgboost、GBDT、SVM、NeuralNetwork等。需要计算距离的模型需要做归一化,比如说KNN、KMeans等。
2)概率模型、树形结构模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、随机森林。
[0,1]标准化是最基本的一种数据标准化方法,指的是将数据压缩到0~1之间。
标准化公式如下
#代码如下defMaxMinNormalization(x):'''[0,1]normaliaztion'''x=(x-np.min(x))/(np.max(x)-np.min(x))returnx
Z-score标准化是基于数据均值和方差的标准化化方法。标准化后的数据是均值为0,方差为1的正态分布。这种方法要求原始数据的分布可以近似为高斯分布,否则效果会很差。如果不服从高斯分布,可以考虑将原始数据取log或者开根号,再检验是否符合高斯分布。
#代码实现defZscoreNormalization(x):'''Z-scorenormaliaztion'''x=(x-np.mean(x))/np.std(x)returnx
某些数据不是数值型的数据,如性别等,在进行计算的时候,往往需要数值型的数据,此时,需要将这些数据进行数值型的转换。哑变量也称虚拟变量,当自变量x为多分类时,会将每一类用一个变哑变量表示。例如x1表示坐飞机,x2表示做火车,x3表示自驾等,当x1=1表示坐飞机,x1=0表示不坐飞机。
在此需要注意的是3值以上的离散变量需要进行哑变量处理,并且增加截距项intercept,同时进行训练集和测试集的拆分。(目的是防止模型过拟合)
若针对训练数据已经做好了独热编码并建立了模型,而新增的预测数据或分类数据的类别变量未包含完整的类别。此时直接使用pd.get_dummies,会发现与训练集得到的结果不一样。例如:训练数据中季节列中春、夏、秋、冬都出现过,而在新的测试数据中只出现了春与夏,两者的结果会不一样。可以在预测数据中新增以下代码,详见原文。
'category',categories=['春','夏','秋','冬'])3.2对循环特征比如24小时的编码,用cos和sin进行编码hour_x=cos(2pihour/24)andhour_y=sin(2pihour/24)
对于回归评价:
MAE会忽略异常值,而RMSE会注意到异常值并得到没有偏差的预测。那么应该使用哪个指标呢?很遗憾,不存在确定的答案。如果你是一名供应链领域的数据科学家,你应该多做试验:如果使用MAE作为性能评估指标会得到很大偏差,你可能需要使用RMSE。如果数据集包含很多异常值,导致预测结果产生偏移,你可能需要用MAE。
还需要注意的是,你可以选择一个或多个评估指标(如MAE&bias)来计算预测的误差,然后用另一个指标(RMSE?)来对模型进行优化。
对于分类则集中使用AUC
importnumpyasnpfromsklearn.metricsimportmean_squared_error,mean_absolute_error,mean_absolute_errordefcheck_error(orig,pred,name_col='',index_name=''):'''orig:实际值pred:预测值'''bias=np.mean(orig-pred)mse=mean_squared_error(orig,pred)rmse=sqrt(mean_squared_error(orig,pred))mae=mean_absolute_error(orig,pred)mape=np.mean(np.abs((orig-pred)/orig))*100res_smape=2.0*np.mean(np.abs(pred-orig)/(np.abs(pred)+np.abs(orig)))*100error_group=[bias,mse,rmse,mae,mape,res_smape]serie=pd.DataFrame(error_group,index=['BIAS','MSE','RMSE','MAE','MAPE','SMAPE'],columns=[name_col])serie.index.name=index_namereturnserie4.6AUC-二分类和多分类模型,采用AUC作为评价指标fromsklearn.metricsimportroc_auc_score
roc_auc_score(y_true,y_score,*,average='macro',sample_weight=None,max_fpr=None,multi_class='raise',labels=None)