交叉验证--分离训练集和测试集--标准化归一化--数据特征筛选

交叉验证--分离训练集和测试集--标准化归⼀化--数据特征筛选⽬录
1,将全部数据分离成训练集和测试集(之前⾸先先将x和y分类出来才可以)
'''
围观改变中国分离数据集--
test_size  :如果是整数则选出来两个测试集,如果是⼩数,则是选择测试集所占的百分⽐。
train_size :同理,都含有默认值0.25
shuffle  :默认为True,表⽰在分离之前是否将其打乱,如果不打乱就设为False
random_state:是随机数的种⼦。(感觉没什么⽤,因此每次都填1吧)
随机数种⼦:其实就是该组随机数的编号,在需要重复试验的时候,保证得到⼀组⼀样的随机数。
⽐如你每次都填1,其他参数⼀样的情况下你得到的随机数组是⼀样的。
但填0或不填,每次都会不⼀样。
随机数的产⽣取决于种⼦,随机数和种⼦之间的关系遵从以下两个规则:
种⼦不同,产⽣不同的随机数;种⼦相同,即使实例不同也产⽣相同的随机数。
'''
del_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=4, random_state=42)
结果:
分离成train
[[8 8 1 1 6]]      [[0]]
test
[[8 9 6 7 0]
[8 7 6 9 0]
[9 3 9 8 5]
[0 8 8 1 3]]
[[0]
[1]
[0]
[0]]
2,将训练集分离做交叉验证
就是将索引分离
ss_validation import KFold
kf = KFold(9, n_folds=3, random_state=2)
for train, test in kf:
print(train)
print(test)
'''
9:代表测试集的例⼦的个数神经网络预测
[3 4 5 6 7 8]
[0 1 2]
-----------------------
[0 1 2 6 7 8]
注意力测试[3 4 5]
-----------------------
[0 1 2 3 4 5]
[6 7 8]
'''
for train, test in kf:
# The predictors we're using the train the algorithm.  Note how we only take the rows in the train folds.
train_predictors = (titanic[predictors].iloc[train,:])
# The target we're using to train the algorithm.
train_target = titanic["Survived"].iloc[train]
# Training the algorithm using the predictors and target.
alg.fit(train_predictors, train_target)
# We can now make predictions on the test fold甬台温铁路
test_predictions = alg.predict(titanic[predictors].iloc[test,:])
predictions.append(test_predictions)
3、归⼀化----标准化---正则化----Python的实现
1、实现归⼀化的Max-Min--(0,1)标准化:
from sklearn.preprocessing import MinMaxScaler
债权人权益这是最简单也是最容易想到的⽅法,通过遍历feature vector⾥的每⼀个列数据,将Max和Min的记录下来,并通过Max-Min作为基数(即Min=0,Max=1)进⾏数据的归⼀化处理:
def MaxMinNormalization(x,Max,Min):
x = (x - Min) / (Max - Min);
return x;
'''
sklearn 包就是这么处理的,输⼊必须是⼆维数组,每个尺度是纵向分的,
举个例⼦X_train为(2,3)矩阵,Min为第⼀列的最⼩值,第⼆列的最⼩值,第三列的最⼩值
Max 为第⼀列的最⼤值,为第⼀列的最⼤值,第⼆列的最⼤值
下⾯的例⼦结果:temp
array([[0., 1., 0.],
[1., 0., 1.]])
scaler.scale_  为  1/ (Max - Min)
array([0.5      , 0.5      , 0.33333333])
'''
import numpy as np
from sklearn.preprocessing import MinMaxScaler
X_train = np.array([[ 2., 4.,  2.],
[4,  2,    5]
])
scaler = MinMaxScaler(feature_range=(0, 1))
X_scaled = scaler.fit_transform(X_train)
print(scaler.scale_)#  array([0.5      , 0.5      , 0.33333333])
scaler.min_      #    array([-1.        , -1.        , -0.66666667])
scaler.inverse_transform(X_train )  # 预测完成后你归⼀化要保证和X_train ⼀个形状
还有⼀个函数fit_transform很像transform,这⾥就⽤fit_transform就可以,什么情况下都⽤fit_transform,就完事了
scaler.min_  ⽬前代表什么还不知道呢。
scaler.inverse_transform(X_train )  # 预测完成后你归⼀化 要保证和X_train ⼀个形状
回归预测⼀般来说是(n,1)数据预测(n,1)的数据(有⼀些预测结果是(n,)的数据,需要变成(n,1)的数据,其实(n,)经验证也可以,)
将预测结果传⼊inverse_transform  API 中,即可。
⼤⼩的⽅法直接⽤np.max()和np.min()就⾏了,尽量不要⽤python内建的max()和min(),除⾮你喜欢⽤List.可以试试np.argsort() 和np.argmax()
2、实现中⼼化和正态分布的Z-Score---最⼤最⼩归⼀化--⽤于稀疏数据的MaxAbs--针对离点的--可视化展⽰原始数据以及标准化后的数据
zscore_scaler = preprocessing.StandardScaler()  # 建⽴StandardScaler对象
data_scale_1 = zscore_scaler.fit_transform(data)  # StandardScaler标准化处理
data的结构可以是numpy.array类型 也可以是dateframe类型
#  标准化,让运营数据落⼊相同的区间
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt
data = np.loadtxt('', delimiter='\t')  # 读取数据,n⾏2列的数据
# Z-Score标准化
zscore_scaler = preprocessing.StandardScaler()  # 建⽴StandardScaler对象
data_scale_1 = zscore_scaler.fit_transform(data)  # StandardScaler标准化处理
# Max-Min标准化
minmax_scaler = preprocessing.MinMaxScaler()  # 建⽴MinMaxScaler模型对象
data_scale_2 = minmax_scaler.fit_transform(data)  # MinMaxScaler标准化处理
# MaxAbsScaler标准化
maxabsscaler_scaler = preprocessing.MaxAbsScaler()  # 建⽴MaxAbsScaler对象
data_scale_3 = maxabsscaler_scaler.fit_transform(data)  # MaxAbsScaler标准化处理
# RobustScaler标准化
robustscalerr_scaler = preprocessing.RobustScaler()  # 建⽴RobustScaler标准化对象
data_scale_4 = robustscalerr_scaler.fit_transform(data)  # RobustScaler标准化标准化处理
# 展⽰多⽹格结果
data_list = [data, data_scale_1, data_scale_2, data_scale_3, data_scale_4]  # 创建数据集列表
scalar_list = [15, 10, 15, 10, 15, 10]  # 创建点尺⼨列表
color_list = ['black', 'green', 'blue', 'yellow', 'red']  # 创建颜⾊列表
merker_list = ['o', ',', '+', 's', 'p']  # 创建样式列表
title_list = ['source data', 'zscore_scaler', 'minmax_scaler', 'maxabsscaler_scaler', 'robustscalerr_scaler']  # 创建标题列表
for i, data_single in enumerate(data_list):  # 循环得到索引和每个数值
plt.subplot(2, 3, i + 1)  # 确定⼦⽹格
plt.scatter(data_single[:, :-1], data_single[:, -1], s=scalar_list[i], marker=merker_list[i],
c=color_list[i])  # ⼦⽹格展⽰散点图
plt.title(title_list[i])  # 设置⼦⽹格标题
plt.suptitle("raw data and standardized data")  # 设置总标题
plt.show()  # 展⽰图形
4、Sigmoid函数
Sigmoid函数是⼀个具有S形曲线的函数,是良好的阈值函数,在(0, 0.5)处中⼼对称,在(0, 0.5)附近有⽐较⼤的斜率⽽当数据趋向于正⽆穷和负⽆穷的时候,映射出来的值就会⽆限趋向于1和0.
个⼈⾮常喜欢的“归⼀化⽅法”,之所以打引号是因为我觉得Sigmoid函数在阈值分割上也有很不错的表现,根据公式的改变,就可以改变分割阈值,这⾥作为归⼀化⽅法,我们只考虑(0, 0.5)作为分割阈值的点的情况:
def sigmoid(X,useStatus):  #这⾥useStatus管理是否使⽤sigmoid的状态,⽅便调试使⽤
if useStatus:
return 1.0 / (1 + np.exp(-float(X)))
else:
return float(X)
4、sklearn数据特征重要程度的筛选
from sklearn.feature_selection import SelectKBest, f_classif
import matplotlib.pyplot as plt
selector = SelectKBest(f_classif,k='all')  #或者k=3:特征的个数
'''
当代文学思潮
dateframtop1_name_x_train[predictors]  是⼀个dataframe结构predictors是列名的列表dateframtop1_name_y_train  因为这⾥只有⼀列所以没有列名
'''
selector.fit(dateframtop1_name_x_train[predictors], dateframtop1_name_y_train) #核⼼函数scores = -np.log10(selector.pvalues_)
#画图
plt.bar(range(len(predictors)), scores)  #画柱状图,⽐如三个柱⼦
#特征的平分如下

本文发布于:2024-09-21 17:44:13,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/414209.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   标准化   分离   阈值   测试   预测
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议