R语言速查
下载和导入包
install.packages("ISLR")
library(ISLR) 补充:读取CSV:Birth = read.csv("D:/Data/AIDataSet/data.csv")
生成点
x = rnorm(100) # 100个服从N(0,1)的点
eps = rnorm(100, 0, 0.25) # 100个服从均值为0,标准差为0.25的服从正态分布的点
dis.grid = seq(from = dislim[1], to = dislim[2], by = 0.1) # 生成了一个序列,以0.1为步长,覆盖了dis的取值范围。数据集信息
str(College)
fix(college)
summary(college)
help(College)
dim(Auto)
names(Boston)绘图
变量相关图

箱线图

箱线图,元素包括:
上边缘
上四分位数
中位数
下四分位数
下边缘
异常值(离群点)
同时展示多幅图像

散点图

在R语言中,plot函数的参数包括:
x:要绘制的对象的横坐标数据。
y:要绘制的对象的纵坐标数据。
type:绘图类型,例如:"p"表示散点图,"l"表示折线图, "b"表示同时绘制散点和折线等。
main:图表的主标题。
xlab:x轴的标签。
ylab:y轴的标签。
xlim:x轴的取值范围。
ylim:y轴的取值范围。
col:绘图的颜色。
pch:散点图中点的符号。
lty:线条的类型。
lwd:线条的宽度。
cex:点的大小。
bg:散点图中点的填充颜色。
las:坐标轴文本的方向。
线性回归
置信区间
预测时的置信区间
预测时的预测区间
绘制散点图和回归曲线

检查拟合效果/离群点/高杠杆点

Q-Q(Quantile-Quantile)Residuals 图用于检验线性回归模型的残差是否符合正态分布。在这个图中:
横轴通常表示标准化的理论分位数(来自于一个正态分布)。
纵轴通常表示标准化的残差的样本分位数。
如果残差符合正态分布,那么残差的样本分位数应该落在理论分位数的直线上。因此,Q-Q Residuals 图提供了一种直观的方式来检查模型残差是否符合正态分布的假设。
通过观察Q-Q Residuals 图,我们可以检查残差是否存在明显的偏离正态分布的情况。如果残差点在图上基本上沿着一条直线分布,那么可以认为残差符合正态分布。反之,如果残差点呈现出明显的偏离,可能意味着模型的残差不符合正态分布。
Residuals vs Leverage(残差与杠杆值)图是用于识别在线性回归模型中具有高杠杆值(leverage)和/或高残差的数据点。在这个图中:
横轴通常表示标准化的杠杆值,用于衡量每个观测对回归系数估计的影响程度。
纵轴通常表示标准化的残差,即观测值与模型拟合值之间的差异。
Residuals vs Leverage 图的主要目的是帮助识别杠杆值高且/或残差高的观测数据点,这些数据点可能对回归模型的参数估计产生较大的影响。在图中,通常会画出一条水平参考线,称为Cook's 距离,用于帮助识别那些对回归系数估计具有较大影响的数据点。
通过Residuals vs Leverage 图,可以检查是否有任何杠杆值高且/或残差高的异常值或离群点,以及它们对回归分析的影响程度。这有助于判断模型是否符合回归分析的假设,并检测异常值的存在。
逻辑斯蒂回归
如果只有一个预测变量:
多元逻辑斯蒂回归:
混淆矩阵和整体预测准确率
将09,10年的数据单独拿出,其余作为训练集,在测试集上验证准确率
线性判别分析
贝叶斯定理:
如果只有一个预测变量,那么:
带入,那么结论是观测会被分类到下面的值取最大的类别中:
如果多个预测变量:
QDA(二次判别分析)假设每一类观测都有自己的协方差矩阵,决策边界是非线性的。

自助法
自助法只是一种取样方法。
例子一:估计中位数估计 $\hat{\mu}$ 的标准误差
medv.mean = 22.53281,自助法的中位数估计22.53281,标准误差为0.4106622
例子二:估计多元逻辑斯蒂回归中的标准误差
创建一个关于统计量的函数
使用boot()函数,三个参数:数据集,函数,取样几次
输出:
我们可以对比glm()函数的标准误差:
t1到t3的std. error分别对应glm()函数输出的三个Std. Error
LOOCV方法
对于 $n$ 个观测 ${(x_1,y_1),(x_2,y_2), ..., (x_n,y_n)}$
取一个作为验证集,其余作为训练集。在训练集上拟合模型,对 $x_i$ 得到预测 $\hat{y_i}$
得到测试集上均方误差的估计。
在 R 语言中,cv.glm() 函数用于执行广义线性模型的交叉验证。该函数返回一个对象,其中包含了交叉验证的结果,其中 $delta 属性是其中一个属性。
对于 $delta 属性,它是一个包含两个值的向量。这两个值分别表示:
第一个值是关于模型的偏差(bias)的度量,通常使用均方误差(Mean Squared Error,MSE)作为偏差的估计。MSE 是真实观测值与预测值之间差异的平均平方值。较低的 MSE 值表示模型具有更小的偏差,即模型能够更好地拟合数据的真实情况。
第二个值是关于模型的方差的度量,通常使用均方误差的标准差(Standard Deviation of Mean Squared Error,SDMSE)作为方差的估计。SDMSE 表示交叉验证期间均方误差的变化程度,用于衡量模型的稳定性。较低的 SDMSE 值表示模型具有较小的方差,即模型对不同的数据子集具有相似的性能。
通过对模型的偏差和方差进行综合考虑,可以评估模型的整体性能。一般来说,我们希望偏差和方差都尽可能地小,即具有较低的 MSE 和 SDMSE 值。
例子2:n折CV方法

最优子集选择
生成数据:
关键代码:
nvmax = 10 代表选择最优的10个预测变量
设置 raw = T,可以保持原始变量的尺度,避免对变量进行标准化或缩放操作。这样,多项式回归模型将直接拟合原始变量的高阶次方
mod.summary 以及计算好了各个模型的 RSS、 $C_p$,BIC 和调整 $R^2$ ,让我们绘制出来:
type="l"表示将各个点连线。

分别用 $C_p$,BIC 和调整 $R^2$ 选择最优模型:
让我们用红点标识最好的模型:
通过指定参数 10 表示 x 坐标轴上的位置,mod.summary$rss[10] 表示 y 坐标轴上的位置,col="red" 指定颜色为红色,cex=2 控制点的大小为 2,pch=2 设置点的形状为三角。

再来点图:

黑块代表相应指标下选择的变量。
提取参数:
前向选择和后向选择
绘图:

提取参数:
Lasso/岭回归
即 L1正则化 和 L2正则化
model.matrix()函数的主要用途是将一个线性回归模型或广义线性模型中的公式和数据转换为设计矩阵。设计矩阵是用于拟合线性回归模型或广义线性模型的基础数据结构。它将因变量和自变量转换为数值化的矩阵形式,方便模型的计算和分析。
model.matrix()函数接受一个公式和数据作为参数。公式表示了模型的结构,例如y ~ x1 + x2表示因变量y与自变量x1和x2之间的线性关系。数据则包含了用于拟合模型的观测值。
cv.glmnet()函数用于进行弹性网络(Elastic Net)模型的交叉验证。弹性网络是一种结合了L1正则化(LASSO回归)和L2正则化(岭回归)的线性回归模型。它可以处理高维数据,并具有变量选择的能力。
cv.glmnet()通过交叉验证,该函数会自动调整lambda的取值范围,并在每个lambda值下计算得到相应的模型。然后基于交叉验证误差,选择具有最小误差的lambda作为最佳lambda。
cv.glmnet()函数的一般用法如下:其中,
x是设计矩阵,y是因变量向量,alpha是弹性网络中L1和L2正则化的权重比例参数(0代表纯岭回归,1代表纯LASSO回归),nfolds是交叉验证的折数。
绘制图像

在整个数据集上使用最佳 $\lambda$ 参数拟合模型:
PCR主成分回归
关键代码:

PLS偏最小二乘
语法与PCR类似
绘制非线性拟合模型
准备:
绘制:

例子2:

回归样条
数据准备同 绘制非线性拟合模型 一节
bs(dis, df = 4, knots = c(4, 7, 11))是指定自变量以样条函数(B-spline)的形式建模。
其中
dis是自变量
df参数指定样条函数的自由度(自变量的拟合程度)
knots参数指定样条函数的节点(分段点)位置。
然后绘制图像

例子2:


逐步回归
准备数据:
关键代码:
使用regsubsets函数:
regsubsets()函数用于执行逐步回归分析。nvmax = 17是指定最大模型大小的参数,这里设置为17,表示最多选择17个自变量进行回归分析。method = "forward"表示使用向前法进行逐步回归分析,即每一步选择与因变量相关性最大的自变量加入模型。
绘图,随变量加入模型评估值的变化:

选择模型:
查看包含哪些变量:
GAM广义可加模型
数据准备同 逐步回归 一节
使用广义加性模型(Generalized Additive Model, GAM)进行拟合:
gam()函数用于执行广义加性模型的拟合。s(Room.Board, df = 2)表示对Room.Board变量拟合光滑样条,并指定平滑自由度为2。
绘图:
se = T表示在图形中绘制拟合曲线的标准误差带(Standard Error Band)。这个带子反映了拟合曲线的不确定性范围。col = "blue"表示将拟合曲线和标准误差带的颜色设置为蓝色。

在测试集上得到误差:
总结:
ANOVA(Analysis of Variance)是一种用于比较两个或多个样本均值是否相等的假设检验方法。在ANOVA中,将数据集分为若干组,比较这些组之间的差异是否显著,以确定是否存在一个或多个因素对数据的影响。
Anova for Parametric Effects表示对于模型中的线性参数部分使用ANOVA方法进行假设检验,判断这些参数是否显著。P值低的表示该变量为线性关系。Anova for Nonparametric Effects表示对于模型中的非线性参数部分使用ANOVA方法进行假设检验,判断这些参数是否显著。P值低的表示该变量为非线性关系。
决策树/分类树
准备数据:
关键代码:
画图:

减枝:

剪枝后的树:

具体信息:
node: 节点编号,表示当前节点在决策树中的位置。
split: 分裂条件,表示当前节点的分裂条件。例如,ShelveLoc: Bad,Medium 表示根据 ShelveLoc 列的取值为 Bad 或 Medium 进行分裂。
n: 节点样本数量,表示当前节点的样本个数。
deviance: 节点的不纯度或损失函数值,用于衡量节点的纯度。
yval: 节点的预测值,表示当前节点的目标变量的平均值(或其他统计量)。
带有 "*" 符号的行表示叶子节点,即决策树的终止节点,不再进行进一步的分裂。这些叶子节点将用于最终的预测。
装袋法
准备数据步骤同上
查看哪些变量最重要
随机森林
提升法
数据准备:
关键代码
Gradient Boosting Machine (GBM) 算法是一种集成学习方法,用于解决回归和分类问题。它通过迭代地训练多个弱学习器(通常是决策树),然后将它们组合起来形成一个更强大的预测模型。(可以认为是提升法)
gbm() 是 GBM 算法的函数,用于训练 GBM 模型。
distribution = "gaussian" 表示使用高斯分布作为目标变量的分布。
n.trees = 1000 表示生成 1000 棵决策树。
shrinkage = 0.1 表示每棵决策树的权重缩减系数为 0.1,用于控制学习速率和过拟合程度。
为了寻找最好的 $\lambda$ ,通常使用循环看哪个效果最好

然后在测试集上看最好的模型
查看最好的模型

支持向量机SVM
https://blog.princehonest.com/stat-learning/ch9/4.html
准备数据:

支持向量分类器

在训练集和测试集上的预测结果
使用多项式核函数

使用径向基函数

使用不同的cost
类似的
PCA主成分分析与k均值聚类
准备数据
关键代码
画图
最后更新于