初级算法梳理-线性回归-打卡
机器学习的一些概念
1.有监督学习:训练数据既有特征(feature)又有标签(lable),通过训练,让机器可以自己找到特征和标签之间的联系,在面对只有特征没有标签的数据时,可以判断出标签。
2.无监督学习:训练样本的标记信息未知,,目标是通过对无标记训练样本的学习来揭示数据的内在性质,及规律,为进一步的数据分析提供基础,此类学习任务中研究最多,应用最广的是聚类,其他的无监督算法还有密度估计、异常检测等
3.半监督学习:训练集同时包含有标记样本数据和未标记样本数据,不需要人工干预,让学习器不依赖外界交互、自动的利用未标记样本来提升学习性能,就是半监督学习
4.主动学习:有的时候,有列表的数据比较稀少,而没有类标的数据很多,但是对数据进行人工标注又非常昂贵,这时候,学习算法可以主动地提出一些标注请求,将一些经过筛选的数据提交给专家进行标注,这哥筛选过程也就是主动学习主要研究的地方
注:半监督学习和主动学习属于利用未标记数据的学习技术,只是其基本思想不同。
5.泛化能力:泛化能力就是模型对未知数据的预测能力。在实际当中,我们通常通过测试误差来评价学习方法的泛化能力。
6泛化误差的定义:泛化误差就是所学习到的模型的风险函数或期望损失
7.欠拟合:欠拟合就是模型没有很好的捕捉到数据特征,不能够很好的拟合数据。在训练集上表现为高偏差,低方差
欠拟合解决方法:
-添加其他特征项
-添加多项式特征,将线性模型通过添加二次项或者三次项让模型泛化能更强。
-减少正则化参数,正则化的目的是用老防止过拟合的,但是现在模型出现了欠拟合,则需要减少正则化参数
8.过拟合:过拟合就是模型把数据学习的太彻底了,以至于把噪声数据的特征也学习到了,这样就导致后期测试的时候不能很好的识别数据,即不能正确的分类。在训练集上具有高方差和低偏差
过拟合解决方法:
-重新清晰数据
-增大数据的训练量
-采用正则化方法
9.交叉验证:交叉验证是在机器学习建立模型和验证模型参数是常用的方法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。交叉验证根据切分的方法不同,交叉验证分为下面三种:
-简单交叉验证
-S折交叉验证
-留一交叉验证
参考:
- 西瓜书
- cs229吴恩达机器学习课程
- 谷歌搜索
线性回归的原理
线性回归的模型形:
线性回归模型有很好的可解释性,可以从权重其θn直接看出每个特征对结果的影响程度。
线性回归适用于X和y之间存在线性关系的数据集,可以使用计算机辅助画出散点图来观察是否存在线性关系.实际上,线性回归中通常使用残差平方和,即点到直线的平行于y轴的距离而不用垂线距离,残差平方和除以样本量n就是均方误差。
线性回归损失函数、代价函数、目标函数
损失函数:就是我们需要优化的目标函数
均方误差作为线性回归模型的代价函数(cost function)。
优化方法
最小二乘法使所有点到直线的距离之和最小,就是使均方误差最小化。
迭代重加权最小平方(牛顿法):由于计算量太大所以实际中并不用
梯度下降法:
我们希望能找到θ使得J(θ)到最小,初始化θ为一个任意值,在迭代过程中不断的更新θ,使得J(θ)更小,直到收敛为止(可以认为J(θ)不再改变)。注意:梯度是有⽅向的,对于⼀个向量 ,每⼀维分量 θi都可以求出⼀个梯度的⽅向,我们就可以找到⼀个整体的⽅向,在变化的时候,我们就朝着下降最多的⽅向进⾏变化就可以达到⼀个最⼩点,不管他是全局的还是局部的。
线性回归的评估指标
SSE(误差平方和):The sum of squares due to error
-同样的数据集的情况下,SSE越小,误差越小,模型效果越好
-缺点:SSE数值大小本身没有意义,随着样本增加,SSE必然增加,也就是说,不同的数据集的情况下,SSE比较没有意义
R-square(决定系数):Coefficient of determination
-越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好
-越接近0,表明模型拟合的越差
-经验值:>0.4, 拟合效果好
-缺点:数据集的样本越大,R²越大,因此,不同数据集的模型结果比较会有一定的误差
Adjusted R-Square (校正决定系数)):Degree-of-freedom adjusted coefficient of determination
-消除了样本数量和特征数量的影响
参考:https://blog.csdn.net/shy19890510/article/details/79375062
sklearn参数详解
1.penalty:正则化项的选择。正则化主要有两种:L1和L2,LogisticRegression默认选择L2正则化。
‘liblinear’ 支持L1和L2,但‘newton-cg’, ‘sag’ 和‘lbfgs’ 只支持L2正则化。
2.dual:bool(True、False), default:False
如果为True,则求解对偶形式,只有在penalty=‘l2’ 且solver=‘liblinear’ 时有对偶形式;通常样本数大于特征数的情况下,默认为False,求解原始形式。
3.tol : float, default:1e-4
停止标准,误差不超过tol时,停止进一步的计算。
4.C :float,default:1.0
正则化强度(正则化系数λ)的倒数; 必须是大于0的浮点数。 与支持向量机一样,较小的值指定更强的正则化,通常默认为1。
5.fit_intercept:bool(True、False),default:True
是否存在截距,默认存在。
6.intercept_scaling :float,default :1.0
仅在使用solver为“liblinear”且fit_intercept=True时有用。 在这种情况下,x变为[x,intercept_scaling],即具有等于intercept_scaling的常数值的“合成”特征被附加到实例矢量。 截距变成了intercept_scaling * synthetic_feature_weight. 注意: 合成特征权重与所有其他特征一样经受l1 / l2正则化。 为了减小正则化对合成特征权重(并因此对截距)的影响,必须增加intercept_scaling。相当于人造一个特征出来,该特征恒为 1,其权重为b。
7.class_weight :dict or ‘balanced’,default:None
class_weight参数用于标示分类模型中各种类型的权重,可以不输入,即不考虑权重,或者说所有类型的权重一样。如果选择输入的话,可以选择balanced让类库自己计算类型权重,或者我们自己输入各个类型的权重,比如对于0,1的二元模型,我们可以定义class_weight={0:0.9, 1:0.1},这样类型0的权重为90%,而类型1的权重为10%。
如果class_weight选择balanced,那么类库会根据训练样本量来计算权重。某种类型样本量越多,则权重越低,样本量越少,则权重越高。当class_weight为balanced时,类权重计算方法如下:n_samples / (n_classes * np.bincount(y))
8.random_state:int,RandomState instance or None,optional,default:None
在随机数据混洗时使用的伪随机数生成器的种子。 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random使用的RandomState实例。 在求solver是’sag’或’liblinear’时使用。
9.solver :‘newton-cg’,‘lbfgs’,‘liblinear’,‘sag’,‘saga’,default:liblinear
liblinear:使用了开源的liblinear库实现,内部使用了坐标轴下降法来迭代优化损失函数。
lbfgs:拟牛顿法的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
newton-cg:也是牛顿法家族的一种,利用损失函数二阶导数矩阵即海森矩阵来迭代优化损失函数。
sag:即随机平均梯度下降,是梯度下降法的变种,和普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度,适合于样本数据多的时候。
saga:线性收敛的随机优化算法。
对于小型数据集,‘liblinear’是一个不错的选择,而’sag’和’saga’对于大型的更快。对于多类问题,只有’newton-cg’,‘sag’,'saga’和’lbfgs’处理多项损失;'liblinear’仅限于一项损失。 ‘newton-cg’,'lbfgs’和’sag’只处理L2惩罚,而’liblinear’和’saga’处理L1惩罚。“sag”和“saga”快速收敛仅在具有大致相同比例的要素上得到保证, 可以使用sklearn.preprocessing中的缩放器预处理数据。
10.max_iter:int ,default:100
仅适用于newton-cg,sag和lbfgs求解器。 求解器收敛的最大迭代次数。
11.multi_class:str,{‘ovr’, ‘multinomial’},default:‘ovr’
‘ovr’ :采用 one-vs-rest 策略,‘multinomial’:直接采用多分类逻辑回归策略。
多类选项可以是’ovr’或’multinomial’。 如果选择的选项是’ovr’,那么二进制问题适合每个标签。 另外,最小化损失是整个概率分布中的多项式损失拟合。 不适用于liblinear解算器。
12.verbose:int,default:0
对于liblinear和lbfgs求解器,将verbose设置为任何正数以表示详细程度。用于开启/关闭迭代中间输出的日志。
13.warm_start:bool(True、False),default:False
如果为True,那么使用前一次训练结果继续训练,否则从头开始训练。对于liblinear解算器没用。
14.n_jobs:int,default:1
如果multi_class =‘ovr’,则在对类进行并行化时使用的CPU数量。 无论是否指定’multi_class’,当solver设置为’liblinear’时,都会忽略此参数。 如果给定值-1,则使用所有CPU。
参考:
1、https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html
2、https://blog.csdn.net/qq_42370261/article/details/84852595
问题:线性回归和多项式回归的区别,适用场景分别是什么样子的?
https://www.cnblogs.com/lowbi/p/10709121.html