学习记录(一)(每日修改)

记录日常学习内容,若有误请指出!

目录

1.shape 针对tensor

2.Softmax(Pytorch)

3.归一化

4.Sklearn

5.SVM实现分类、回归

6.分类、回归方法中心思想个人理解汇总

6.1 KNN

6.11 分类

6.2 SVM

6.21 分类

 6.22 回归

6.3 DecisionTree

6.31 分类

 6.32 回归

6.4 GBR 

6.5 Naive Bayes

 6.6 RandomForest

6.6.1 分类

6.6.2 回归

7.调参(还未尝试)

8. Grid Search

针对GBR


1.shape 针对tensor

shape[0]返回行数,shape[1]返回列数

shape[0]针对一维数组或者矩阵,返回其总个数

2.Softmax(Pytorch)

针对分类网络,最后一层需要进行softmax进行概率转化,最后需要选择出概率最好的点作为分类标准

 pre = torch.max(F.softmax(prediction_y, dim=0), 1)[1]+1

dim=0#针对行计算

dim=1#针对列计算

一般使用交叉熵作为损失函数

loss_func=torch.nn.CrossEntropyLoss()

loss = loss_func(prediction, y.squeeze(dim=1).long())

loss.backward()

3.深度学习回归处理

在网络设置中最后一层维度设置成1

4.Sklearn

Pycharm-Settings中scikits.learn=Sklean

5.SVM实现分类、回归

数据举例:

分类情况:

采用SVC

model_svr2 = SVC(kernel='rbf',C=1,gamma='auto')  # 建立支持向量机回归模型对象
model.fit(x, y.ravel()) # 现将训练集x进行训练
print(model.predict(test_x))

 参数设置 

【参考文献:scikit-learn代码实现SVM分类与SVR回归以及调参_CtrlZ1的博客-CSDN博客_svr调参

sklearn.svm.SVC(C=1.0,kernel='rbf', degree=3, gamma='auto',coef0=0.0,shrinking=True,probability=False,tol=0.001,cache_size=200, class_weight=None,verbose=False,max_iter=-1,decision_function_shape=None,random_state=None)
参数:
 
l C:C-SVC的惩罚参数C?默认值是1.0 
 
C越大,相当于惩罚松弛变量,希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样对训练集测试时准确率很高,但泛化能力弱。C值小,对误分类的惩罚减小,允许容错,将他们当成噪声点,泛化能力较强。
 
l kernel :核函数,默认是rbf,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’
 
  0 – 线性核函数:u’v                           kernel=‘linear’
 
  1 – 多项式核函数:(gamma*u’*v + coef0)^degree kernel=‘poly’
 
  2 – 径向基核函数:exp(-gamma|u-v|^2)          kernel=‘rbf’
 
  3 – sigmod核函数:tanh(gamma*u’*v + coef0)    kernel=‘sigmod’
 
l degree :多项式poly函数的维度,默认是3,选择其他核函数时会被忽略。
 
l gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’,则会选择1/n_features
 
l coef0 :核函数的常数项。对于‘poly’和 ‘sigmoid’有用。
 
l probability :是否采用概率估计?.默认为False
 
l shrinking :是否采用shrinking heuristic方法,默认为true
 
l tol :停止训练的误差值大小,默认为1e-3
 
l cache_size :核函数cache缓存大小,默认为200
 
l class_weight :类别的权重,字典形式传递。设置第几类的参数C为weight*C(C-SVC中的C)
 
l verbose :允许冗余输出?
 
l max_iter :最大迭代次数。-1为无限制。
 
l decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3
 
l random_state :数据洗牌时的种子值,int值
 
主要调节的参数有:C、kernel、degree、gamma、coef0。

回归情况:

这边测试下,这两种回归模型效果比较好,SVR是支持向量机里面的回归、而GBR是梯度增强回归。

model_svr = SVR()  # 建立支持向量机回归模型对象
model_gbr = GradientBoostingRegressor()  # 建立梯度增强回归模型对象

测试回归的指数这边显示了四种

#explained_variance_score:解释回归模型的方差得分,其值取值范围是[0,1],越接近于1说明自
#explained_variance_score:解释回归模型的方差得分,其值取值范围是[0,1],越接近于1说明自变量越能解释因变量
    #的方差变化,值越小则说明效果越差。
#mean_absolute_error:平均绝对误差(Mean Absolute Error,MAE),用于评估预测结果和真实数据集的接近程度的程度
    #,其其值越小说明拟合效果越好。
#mean_squared_error:均方差(Mean squared error,MSE),该指标计算的是拟合数据和原始数据对应样本点的误差的
    #平方和的均值,其值越小说明拟合效果越好。
#r2_score:判定系数,其含义是也是解释回归模型的方差得分,其值取值范围是[0,1],越接近于1说明自变量越能解释因
    #变量的方差变化,值越小则说明效果越差。
model_metrics_name = [explained_variance_score, mean_absolute_error, mean_squared_error, r2_score]  # 回归评估指标对象集
model_metrics_list = []  # 回归评估指标列表
for i in range(5):  # 循环每个模型索引
    tmp_list = []  # 每个内循环的临时结果列表
    for m in model_metrics_name:  # 循环每个指标对象
        tmp_score = m(test_y, pre_y_list[i])  # 计算每个回归指标结果
        tmp_list.append(tmp_score)  # 将结果存入每个内循环的临时结果列表
    model_metrics_list.append(tmp_list)  # 将结果存入回归评估指标列表

调参可以在官网搜索SVR进行查阅

sklearn.svm.SVR(kernel ='rbf',degree = 3,gamma ='auto_deprecated',coef0 = 0.0,tol = 0.001,C = 1.0,epsilon = 0.1,shrinking = True,cache_size = 200,verbose = False,max_iter = -1 )
kernel : string,optional(default ='rbf')

指定要在算法中使用的内核类型。它必须是'linear','poly','rbf','sigmoid','precomputed'或者callable之一。如果没有给出,将使用'rbf'。如果给出了callable,则它用于预先计算内核矩阵。

degree: int,可选(默认= 3)

多项式核函数的次数('poly')。被所有其他内核忽略。

gamma : float,optional(默认='auto')

'rbf','poly'和'sigmoid'的核系数。

当前默认值为'auto',它使用1 / n_features,如果gamma='scale'传递,则使用1 /(n_features * X.std())作为gamma的值。当前默认的gamma''auto'将在版本0.22中更改为'scale'。'auto_deprecated','auto'的弃用版本用作默认值,表示没有传递明确的gamma值。

coef0 : float,optional(默认值= 0.0)

核函数中的独立项。它只在'poly'和'sigmoid'中很重要。

tol : float,optional(默认值= 1e-3)

容忍停止标准。

C : float,可选(默认= 1.0)

错误术语的惩罚参数C.

epsilon : float,optional(默认值= 0.1)

Epsilon在epsilon-SVR模型中。它指定了epsilon-tube,其中训练损失函数中没有惩罚与在实际值的距离epsilon内预测的点。

收缩 : 布尔值,可选(默认= True)

是否使用收缩启发式。

cache_size : float,可选

指定内核缓存的大小(以MB为单位)。

详细说明 : bool,默认值:False

启用详细输出。请注意,此设置利用libsvm中的每进程运行时设置,如果启用,则可能无法在多线程上下文中正常运行。

max_iter : int,optional(默认值= -1)

求解器内迭代的硬限制,或无限制的-1

6.分类、回归方法中心思想个人理解汇总

6.1 KNN

6.11 分类

KNN 全程是K-NearestNeighbors, 也就是K个距离最近的邻居,专业术语是K最近邻分类算法。

也就是拿这个点周边K个点作为分类的标准,比如下图绿色圆圈在(k=3)的情况下为三角形

 6.12回归

KNN计算某个数据点的预测值时,模型从训练数据集中选择离该数据点最近的k个数据点,并且把这些数据的y值取均值,把求出的这个均值作为新数据点的预测值。

6.2 SVM

6.21 分类

中心思想:求解能够正确划分训练数据集并且几何间隔最大的分离超平面

也就是 wx + b = 0

支持向量机(support vector machines, SVM)是一种二分类模型。SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化

多分类情况下,可以分为多种方法。

a.一对多法(one-versus-rest,简称1-v-r SVMs)。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM。分类时将未知样本分类为具有最大分类函数值的那类。

b.一对一法(one-versus-one,简称1-v-1 SVMs)。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。Libsvm中的多类分类就是根据这个方法实现的。

c.层次支持向量机(H-SVMs)。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止,也就是不断分层

 6.22 回归

 中心思想:

  1. 在 Margin 区域内的样本点越多,则 Margin 区域越能够较好的表达样本数据点,此时,取 Margin 区域内中间的那条直线作为最终的模型;用该模型预测相应的样本点的 y 值;
  2. 在具体训练 SVM 算法模型解决回归问题时,提前指定 Margin 的大小,算法引入的超参数:ε,表示 Margin 区域的两条直线到区域中间的直线的距离,如图:

  • SVM 解决回归问题的思路与解决分类问题思路相反,解决分类问题时,希望 Margin 区域内没有样本点或者样本点尽可能的少;

6.3 DecisionTree

6.31 分类

决策树通过树形结构来对数据样本进行分类。一棵完整的结构树由结点和有向边构成,其中内部结点表示特征叶子结点表示类别,决策树从根结点开始,选取数据中某一特征,根据特征取值对实例进行分配,通过不断地选取特征进行实例分配,决策树可以达到对所有实例进行分类的目的。

决策树学习的目标就是基于数据归纳出这样的一组规则

针对特征值选择,有三种方式来选取最优特征,包括信息增益信息增益比基尼指数

熵:

E(D)=-\sum_{k=1}^{C}p_{k}logp_{k}

信息增益(information gain)则定义为由于得到特征X的信息而使得类Y的信息不确定性减少的程度,即信息增益是一种描述目标类别确定性增加的量,特征的信息增益越大,目标类的确定性越强。

信息增益比:针对某个特征分类取值过多的情况,往往使得其信息增益远远大于其他特征从而失去意义。特征A对数据集D的信息增益比可以定义为其信息增益g(D,A)与数据集D关于特征A取值的熵EA(D)的比值。

基尼指数:基尼指数是针对概率分布而言的

 6.32 回归

详细计算过程可以:Regression Tree 回归树 - 知乎

主要思想是在于寻找最优切分变量j和最优切分点s。

如第一步s=5

上述算法达到最小值 

6.4 GBR 

Gradient Boosting 的基本思想是:串行地生成多个弱学习器每个弱学习器的目标是拟合先前累加模型的损失函数的负梯度使加上该弱学习器后的累积模型损失往负梯度的方向减少。

6.5 Naive Bayes

朴素贝叶斯法是基于贝叶斯定理与特征条件独立性假设的分类方法。对于给定的训练集,首先基于特征条件独立假设学习输入输出的联合概率分布(朴素贝叶斯法这种通过学习得到模型的机制,显然属于生成模型);然后基于此模型,对给定的输入 x,利用贝叶斯定理求出后验概率最大的输出 y。

 6.6 RandomForest

6.6.1 分类

随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树

其实从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想

6.6.2 回归

随机森林在不同的随机选择的样本子集上训练每个决策树,然后对预测取平均以进行整体预测。应该是和决策树回归分析是类似的,也是通过区域的平均值作为回归数值

7.调参(还未尝试)

针对GBR

# 调参小技巧
# 根据要解决的问题选择损失函数
# n_estimators尽可能大(如3000)
# 通过grid search方法对max_depth, learning_rate, min_samples_leaf, 及max_features进行寻优
# 增加n_estimators,保持其它参数不变,再次对learning_rate调优

8. Grid Search

​ ​Grid Search是一种调参的手段,即穷举,穷举所有的超参组合,因此适用于小数据。

针对GBR

参数:

1. n_estimators(迭代次数)

 Bug:

ValueError: Parameter values for parameter (n_estimators) need to be a sequence.

此函数输出的是 range型数据,而要求需要是序列类型,即list型数据,所以将range类型转为list类型数据即可!

处理方式:将range(200,401,10)改成list(range(200,401,10))


#超参
from sklearn.grid_search import GridSearchCV
from sklearn import ensemble

param_test1 = {'n_estimators':list(range(200,401,10))}
gsearch1=GridSearchCV(estimator=GradientBoostingRegressor(learning_rate=0.1,min_samples_split=300,min_samples_leaf=20,max_depth=8,max_features='sqrt',subsample=0.8,random_state=10),
param_grid = param_test1, scoring='r2',iid=False,cv=5)

gsearch1.fit(x,y.ravel())
print(gsearch1.grid_scores_, gsearch1.best_params_, gsearch1.best_score_)

我这边选择出来的是 n_estimators=290

2. learning_rate(步长)步长初始值设置为0.1(可以最后调,适当调低,提高泛化能力)

对决策树进行调参

3. max_depth(最大深度)

我这边选择出来的是 max_depth=7

4. min_samples_split(最小样本数)

我这边选择出来的是 min_samples_split=80

5. min_samples_leaf(叶子节点最少样本数)

我这边选择出来的是 min_samples_leaf=1000

param_test3 = {'min_samples_split':list(range(800,1900,200)), 'min_samples_leaf':list(range(60,101,10))}
gsearch3 = GridSearchCV(estimator = GradientBoostingRegressor(learning_rate=0.1, n_estimators=290,max_depth=7,
                                     max_features='sqrt', subsample=0.8, random_state=10),
                       param_grid = param_test3, scoring='r2',iid=False, cv=5)
gsearch3.fit(x,y.ravel())
print(gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_)

6. max_features(最大特征数)

这边我最开始设置的就是9个特征值

7. subsample(子样本)

这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差。

#subsample

param_test5 = {'subsample':[0.6,0.7,0.75,0.8,0.85,0.9]}
gsearch5 = GridSearchCV(estimator = GradientBoostingRegressor(learning_rate=0.1, n_estimators=290,max_depth=7, min_samples_leaf =80,
               min_samples_split =1000, random_state=10),
                       param_grid = param_test5, scoring='r2',iid=False, cv=5)
gsearch5.fit(x,y.ravel())
print(gsearch5.grid_scores_, gsearch5.best_params_, gsearch5.best_score_)

类似查找结果呈现:

显示每个的结果,最后为最佳的参数。 

最终通过调参差不多能将0.91提升到0.946

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值