numpy数组
1、
numpy数组
1、
如何进行增维?(放到回归树中的数据必须是二维的)
1).reshape(-1,1)
2)[:,np.newaxis]
交叉验证()
1、观察模型稳定性的一种方法,避免测试集训练集划分导致模型不同
2、数据分为n份,依次把其中一份作为测试集,其他为训练集,交叉验证n次求平均值
3、model_selection.cross_val_score的五个参数
1)任何实例化的算法模型
2)不需划分测试集、训练集的特征矩阵
3)不需划分的完整标签
4)cv=10,做十次交叉验证,数据划分为十份,每次一份为测试集,剩下为训练集,通常选5,默认为5
5)scoring="neg_mean_squared_error",neg_mean_squared_error负均方误差。用这个指标评估交叉验证的结果。不填,回归默认返回R平方
1、回归问题处理的是连续型变量
交叉验证(model_selection.cross_val_score)
1、观察模型稳定性的一种方法,避免测试集训练集划分导致模型不同
2、数据分为n份,依次把其中一份作为测试集,其他为训练集,交叉验证n次求平均值
1、回归问题处理的是连续型变量
回归树
一、参数、属性、接口几乎和分类树相同)
二、回归树没有标签分布均衡问题,没有class_weight
三、参数criterion差异
1、="mse",均方误差
1)父节点和子节点均方误差的差额,本质是样本真实数据和回归结果的差异。
2)在回归树中,MSE是分枝质量衡量指标、回归树回归质量衡量指标。越小越好。
3)回归树接口score返回的是R平方,不是MSE,取值为负无穷到1,MSE总为正,sklearn中为负值
2、="friedman_mse",费尔德曼均方误差
3、="mae",绝对平均误差
四、目标权重参数(用的少)
控制目标权重,保持样本标签平衡(不平衡:某类标签占比大,决策树会向占比大标签偏移)
1、class_weight
1)给少量标签更多权重,参数默认None(所有标签相同权重)
2、min_weight_fraction_leaf
1)基于权重的剪枝参数,比min_samples_leaf更偏向主导类
2)样本加权使用此参数剪枝
重要接口
1、fit训练,score
2、apply测试样本叶子节点索引,predict返回测试样本分类或回归标签结果(只输入训练集特征,不需要标签y)
注:所有接口中要求输入x_test或x_train部分必须输入二维矩阵,不接受任何一维矩阵输入,若数据只有一个样本,reshape(-1,1)增维
4、max_features
1)限制分枝考虑的特征个数
2)用于高维数据,防止过拟合
3)缺点:强行设定会导致模型学习不足。
4)如果希望通过降维防止过拟合,最好使用PCA,ICA中的降维算法
5、min_impurity_decrease
1)限制信息增益的大小,信息增益小于指定数值的分枝不会发生
2)信息增益:父节点和子节点信息熵的差(子节点信息熵一定小于父节点信息熵),越大,这一层分枝对决策树贡献越大
注:
1)如何确定最优的剪枝参数?画出超参数学习曲线
2)剪枝参数不一定能提升模型在测试集上的表现
三、剪枝参数:正确剪枝是优化决策树算法的核心
注:剪枝后准确度不下降,保留剪枝参数,避免重复计算;准确度下降,注掉参数
1、max_depth:限制树的最大参数
高维度、低样本量非常有效,从=3开始尝试,看拟合效果再增加深度
2、min_sample_leaf
1)一个节点在分枝后,每个节点至少包含min_sample_leaf个训练样本samples
2)一般和max_depth搭配使用
3)太小:过拟合,太大:阻止模型学习数据
4)从=5开始使用;
训练集测试集划分不平衡:输入浮点数(含义为样本总量*小数);
类别不多,=1通常最好
3、min_sample_split
1)一个节点至少min_sample_split个样本才被允许分枝
控制随机性的两个参数
1、random_state:控制随机模式,使每次结果一致,默认为None
决策树高维随机性明显,低维度数据集随机性不会显现
2、splitter:控制随机性,可以与random_state同时设置,如果设置了反而准确度降低则不写
1)="best",默认,分枝随机,但会优先选更重要特征进行分枝
2)="random",更随机,决策树会更深,拟合程度更低(防止过拟合)
决策树重要参数
1、criterion:决定不纯度计算方法
entropy信息熵,gini基尼系数
不纯度:
ordinalencoder
数据标准化:数据按照均值中心化后,再按标准差缩放,数据就会变成均值为0方差为1的正态分布
API:from sklearn.preprocessing import StandardScaler
特征工程:
去中心化:让所有记录减去一个固定值。
数据归一化:把数据按照最小值中心化后再按极差缩放,然后被收敛到0-1之间
preprocessing.minmax
选择行,
选择列
选择行列
hist 直方图
from matplotlib import pyplot as plt
from matplotlib import font_manager
a=[zifuchuan]
plot.hist(a.fenzushu)
细节
计算组数=num_bin= (max(a)-nim(b)//d)
d=5
组数= 极差/组距
x轴的刻度设置
plt.xticks(range(min(a),max(a)+d,d))
plt.show()
图形大小:plt.figure(figsze=(20,8),dpi=80)
{数据}
python内置类型性能分析:
timei模块
可以用来测试一小段python代码的执行速度
class timeit.Timer(stmt='pass',setup='pass',timer=<timer function>)
Timer:是测量小段代码执行速度的类
stmt:参数是要测试的代码语句
setup:参数是运行代码时需要的设置
timer:参数是一个定时函数,与平台有关
消耗时间大小:
O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
数据结构与算法:
算法是一种独立的解决问题的方法和思想,语言并不重要,重要的是思想
算法的五大特性:
1.输入:算法具有0个或多个输入
2.输出:算法至少有1个或多个输出
3.有穷性:算法在有限的步骤之后就会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间范围内
4.确定性:算法中的每一步都有确定性的含义,不会出现二义性
5.可行性:算法的每一步都是可行的,也就是说每一步都能够执行有限的次数完成
数组的形状
shape即可查看数组的各个维度长度(输出按三维二维依次降低,块、行、个)
reshape方法可以重新设置行列,是有返回值的,而不改变本身
有返回值才会输出
结合shape和reshape可以做到在不清楚维度长度的情况下降维
flatten可以将数组展开变成一维
数组的计算
numpy数组对数字进行+*-/计算,是对全部单元进行计算
nan>>not a number 0/0
inf>>infinite x/0
数组对数组进行计算:
不同维度的数组进行计算至少有一个维度的长度相同
广播会在缺失或者长度为1的维度上进行(不同维度的计算本质上是广播)
广播原则:如果两个数组的后缘维度,即从末尾开始算起的维度轴长相符,或者某一方的长度为1,即广播jian'r
一维数组只有0轴,二维有0、1轴,三维有0、1、2轴
reshape(0,1,2),shape输出(2,1,0)
CSV逗号分隔值文件
numpy的读取文件方法
unpack参数实现行列转置
transpose,T,swapaxes(1,0)方法实现行列转置