本站消息

站长简介


前每日优鲜python全栈开发工程师,自媒体达人,逗比程序猿,钱少话少特宅,我的公众号:想吃麻辣香锅

  python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长



+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2020-06(20)

2020-07(25)

2020-08(40)

2020-09(61)

2020-10(55)

深度学习必备----python中数据处理与特征等基础知识

发布于2021-05-29 16:13     阅读(506)     评论(0)     点赞(7)     收藏(5)


0

1

2

3

4

5



 

 

1.对数据进行类型转化

import pandas as pd

 

s = pd.Series(['1', '2', '4.7', 'pandas', '10'])

s.astype(float, errors='ignore')------------------------可以将s转化为float类型,对于不能正常转化的值可以忽略掉

pd.to_numeric(s, errors='coerce')---------------------可以将s中的值转化为数字,不能转化的将会以NAN来代替

 

2.处理重复数据

 

df.drop_duplicates()去掉重复数据

df.drop_duplicates('column1', keep='last')去掉重复数据,但有条件限制:如果数据重复,保留column1字段中排在后面的那一个

 

3.判断缺失数据

s.isna()查看是否有缺失数据

4.填补缺失数据

.fillna(method=' '),其中参数method可取:

pad/ffill:用前一个非缺失值去填充该缺失值

backfill/bfill:用下一个非缺失值填充该缺失值

None:指定一个值去替换缺失值(缺省默认这种方式)

5.填补空缺的数据如果遵循某种规律的话,可以采用深度学习的算法进行聚类、回归等方法找到规律,根据规律填缺失值。

 

6.特征数值化

如果是离散的值,可以通过特征与数值直接转换,比如df.replace({"N": 0, 'Y': 1})将N转化为0,将Y转化为1;

 

可以用方法进行转化: from sklearn.preprocessing

                                     import LabelEncoder

                                     le = LabelEncoder()

                                    le.fit_transform(df['hypertension']);也可以fit()+trensform() 两种结果一样---------(fit对每种进行标记-标签名指原来的值.get_feature_names() ,transform根据标记对每一个进行转换);

7.特征二值化

pm25['bdays'] = np.where(pm25["Exposed days"] > pm25["Exposed days"].mean(), 1, 0)------------满足不等式bdays的值为1,不满足为0;

from sklearn.preprocessing

import Binarizer

bn = Binarizer(threshold=pm25["Exposed days"].mean())分为大于均值的和小于均值的两种

result = bn.fit_transform(pm25[["Exposed days"]])对两种进行归一化

等价于binarize(pm25[['Exposed days']], threshold=pm25['Exposed days'].mean());

8One-hot编码

pd.get_dummies(data):有多少种不同的值就会有多少个标签

对color这列进行编码,并去掉第一种状态,并合并到原数据中:df_dum = pd.get_dummies(persons['color'], drop_first=True) ,persons.merge(df_dum, left_index=True, right_index=True);

size_mapping = {'XL': 3, 'L': 2, 'M': 1}, df['size'] = df['size'].map(size_mapping);

from sklearn.preprocessing ;import OneHotEncoder ohe = OneHotEncoder() ;cl = ohe.fit_transform(df[['classlabel']]);

9.特征离散化

 

pd.cut(ages['years'],3)分成三部分,也就是三种离散特征;

pd.cut(ages['years'], 3, labels=[0, 1, 2])同时为每种特征添加标签;

pd.cut(ages2['years'], bins=[9, 30, 50, 300], labels=['Young', 'Middle', 'Senior'])分成指定的三部分范围中并添加标签;

  1. from sklearn.preprocessing import KBinsDiscretizer
  2. kbd = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform') # ④
  3. trans = kbd.fit_transform(ages[['years']]) 对数据分成三类并对离散值转换

rnd = np.random.RandomState(42), X = rnd.uniform(-3, 3, size=100)随机生成-3——3之间的100个数

10.数据规范化

StandardScaler().fit_transform(iris.data)可以对数据进行标准化,把数据转化成正态分布;

np.mean(iris_std, axis=0)求每一列的均值;

MinMaxScaler().fit_transform(iris.data),数据中心化后,再按极差(最大值 - 最小值)缩放,数据移动了最小值个单位,并且会被收敛到[0,1]之间,归一化也就是;

  1. from sklearn.preprocessing import RobustScaler, MinMaxScaler
  2. robust = RobustScaler()
  3. robust_scaled = robust.fit_transform(X)

对数据的中心和范围使用更有鲁棒性的估计;

归一化

  1. from sklearn.preprocessing import Normalizer
  2. norma = Normalizer() # ③
  3. norma.fit_transform([[3, 4]])

 

norma_max = Normalizer(norm='max'),

norma1 = Normalizer(norm='l1'),其中若为l1时,每个样本(每行)的值除以每个样本(每行)各值的绝对值之和
若为l2时,变换后每个样本(每行)的各维特征的平方和为1
若为max时,样本各个特征值除以样本中特征值最大的值

 

11.特征提取

线性回归中coef_和intercept_都是模型参数,即为w,coef_为w1到w4,intercept_为w0;

  • 循序向前特征选择:Sequential Forward Selection,SFS;
  • 循序向后特征选择:Sequential Backword Selection,SBS;
  • 穷举特征,并将特征名打印出来;
  1. import numpy as np
  2. from mlxtend.feature_selection import ExhaustiveFeatureSelector as EFS
  3. efs = EFS(RandomForestRegressor(),min_features=1,max_features=5,scoring='r2',n_jobs=-1) # ⑥
  4. efs.fit(np.array(mini_data),y_train)
  5. mini_data.columns[list(efs.best_idx_)]
  1. from mlxtend.feature_selection import ExhaustiveFeatureSelector
  2. from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
  3. from sklearn.metrics import roc_auc_score
  4. feature_selector = ExhaustiveFeatureSelector(RandomForestClassifier(n_jobs=-1), # ○11
  5. min_features=2,
  6. max_features=4,
  7. scoring='roc_auc',
  8. print_progress=True,
  9. cv=2)
  10. features = feature_selector.fit(np.array(train_features.fillna(0)), train_labels)
  11. filtered_features= train_features.columns[list(features.best_idx_)]

递归特征消除:递归特征消除的主要思想是反复构建模型,然后选出最好的(或者最差的)特征(根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到遍历了所有的特征;

根据某中检验方法,比如chi2 啦,选择k个最高分数的特征,属于单变量特征选择的一种,可以看做是一个估计器的预处理步骤;

  1. from sklearn.feature_selection import RFE
  2. rfe = RFE(RandomForestRegressor(), n_features_to_select=5) # ○12
  3. rfe.fit(np.array(mini_data),y_train)
  4. rfe.ranking_

VarianceThreshold(threshold=(0.8 * (1 - 0.8))),过滤器法的一种,去掉那些方差没有达到阈值的特征。默认情况下,删除零方差的特征;

from xgboost import XGBClassifier ,model = XGBClassifier() , model.fit(X,y) ,model.feature_importances_,得到特征重要性

 

12.特征抽取

主成分分析:from sklearn.decomposition import PCA ,import numpy as np ,pca = PCA()-----eg:pca = PCA(.95) , lower_dimensional_data = pca.fit_transform(mnist_data);

LDA:from sklearn.discriminant_analysis ,import LinearDiscriminantAnalysis as LDA, from sklearn.linear_model import LogisticRegression, lda = LDA(n_components=2) ,

X_train_lda = lda.fit_transform(X_train_std, y_train);

逻辑回归:lr = LogisticRegression() lr = lr.fit(X_train_lda, y_train);




0

1

2

3

4

5

6



所属网站分类: 技术文章 > 博客

作者:imsorry

链接:https://www.pythonheidong.com/blog/article/977993/45c8df4f978303f24821/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

7 0
收藏该文
已收藏

评论内容:(最多支持255个字符)