A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

遇到的问题
SVM模型训练时一直卡住不动,【原因是数据没有标准化或者是归一化】

特征处理
1删除无用变量
无用变量比如一个类只有唯一属性(人类只用男性),若加入模型训练且对最终模型生效的话,很可能就是出现了过拟合

data.drop(['id_name', 'custid', 'trade_no', 'bank_card_no'], axis=1, inplace=True)
或者对每一列的数据进行统计,如果这一列的数据每一个都不同,即判断为无关特征并且删去。

for i in data.columns:
    count = data.count()
    if len(list(data.unique())) in [1,count,count-1]:
        data.drop(i,axis = 1,inplace=True )
2特征类型划分
数值型特征
取出数值型特征,观察缺失及分布情况

# 取出数值型变量
X_num = X.select_dtypes('number').copy()
print(X_num)
X_num.shape
# 查看缺失情况
num_miss= X_num.count()
print(num_miss)
#查看缺失率
num_miss_rate = 1-X_num.count()/len(X_num)
print(num_miss_rate)
#缺失率前十
num_miss_rate.sort_values(ascending=False, inplace=True)
print(num_miss_rate[:10])

缺失值处理
(1)填充固定值

选取某个固定值/默认值填充缺失值。

data.fillna(0,inplace=True)
(2)填充均值

对每一列的缺失值,填充当列的均值

data.fillna(data.mean(),inplace=True)
(3)填充中位数

对每一列的缺失值,填充当列的中位数。

data.fillna(data.median(),inplace=True)
(4)填充众数

对每一列的缺失值,填充当列的众数。由于存在某列缺失值过多,众数为nan的情况,因此这里取的是每列删除掉nan值后的众数。

data.fillna(data.mode(),inplace=True) # 填充众数,该数据缺失太多众数出现为nan的情况
features_mode = {}
for f in features:
    print f,':', list(data[f].dropna().mode().values)
    features_mode[f] = list(data[f].dropna().mode().values)[0]
data.fillna(features_mode,inplace=True)
(5)填充上下条的数据

对每一条数据的缺失值,填充其上下条数据的值。

data.fillna(method='pad', inplace=True) # 填充前一条数据的值,但是前一条也不一定有值
data.fillna(0, inplace=True)

data.fillna(method='bfill', inplace=True) # 填充后一条数据的值,但是后一条也不一定有值
data.fillna(0, inplace=True)
(6)填充插值得到的数据

用插值法拟合出缺失的数据,然后进行填充。

for f in features: # 插值法填充
    data[f] = data[f].interpolate()

data.dropna(inplace=True)
字符型特征
reg_preference_for_trad表示城市类型,仅有两个缺失,用众数填充后分别使用 哑变量 或 编码 的形式进行数据装换

# 众数填充
data['reg_preference_for_trad'] = data['reg_preference_for_trad'].fillna(data['reg_preference_for_trad'].mode()[0])

# 哑变量
data_dummy = pd.get_dummies(data['reg_preference_for_trad'])
# 数字编码
data_map = data['reg_preference_for_trad'].map({'一线城市': 0, '二线城市': 1,'三线城市': 2,  '其他城市': 3, '境外': 4})
#数字转码
n=set(data['reg_preference_for_trad'])
dic={}
for i,j in enumerate(n):
    dic[j]=i
data['reg_preference_for_trad'] = data['reg_preference_for_trad'].map(dic)
2数据类型
数据归一化

from sklearn import preprocessing
min_max_scale = preprocessing.MinMaxScaler()
min_max_data = min_max_scale.fit_transform(data)
数据标准化

from sklearn import preprocessing
zdata = preprocessing.scale(data)

---------------------
作者:lgy54321
来源:CSDN
原文:https://blog.csdn.net/lgy54321/article/details/84330070
版权声明:本文为博主原创文章,转载请附上博文链接!

2 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马