机器学习基于R包mlr3(9)--回归--GAM非线性回归
1、关于GAM非线性回归 (1) n阶多项式 如前所说,线性回归的假设是每个预测变量与输出变量之间为线性相关。即类似 y = ax + b。 当预测变量与输出变量之间为非线性相关,即呈曲线特征时,可尝试使用高阶多项式进行拟合。 $$ y = \beta_0 + \beta_1x + \beta_2x^2 + …+\beta_nx^n + \varepsilon $$ ...
1、关于GAM非线性回归 (1) n阶多项式 如前所说,线性回归的假设是每个预测变量与输出变量之间为线性相关。即类似 y = ax + b。 当预测变量与输出变量之间为非线性相关,即呈曲线特征时,可尝试使用高阶多项式进行拟合。 $$ y = \beta_0 + \beta_1x + \beta_2x^2 + …+\beta_nx^n + \varepsilon $$ ...
在建立通用线性模型时,当模型参数即斜率值绝对值过大时,容易存在过拟合的风险。可通过下面介绍的3种正则化方法将每个预测变量的斜率参数缩小为0或者接近0。 $$ y = \beta_0 + \beta_1x_1 + \beta_2x_2 + …+\beta_kx_k + \epsilon $$ ...
1 2 library(mlr3verse) library(tidyverse) 0、示例数据 1 2 3 4 5 6 7 8 9 10 11 12 13 data(Iowa, package = "lasso2") head(Iowa) # Year Rain0 Temp1 Rain1 Temp2 Rain2 Temp3 Rain3 Temp4 Yield # 1 1930 17.75 60.2 5.83 69.0 1.49 77.9 2.42 74.4 34.0 # 2 1931 14.76 57.5 3.83 75.0 2.72 77.2 3.30 72.6 32.9 # 3 1932 27.99 62.3 5.17 72.0 3.12 75.8 7.10 72.2 43.0 # 4 1933 16.76 60.5 1.64 77.8 3.45 76.4 3.01 70.5 40.0 # 5 1934 11.36 69.5 3.49 77.2 3.85 79.7 2.84 73.4 23.0 # 6 1935 22.71 55.0 7.00 65.9 3.35 79.4 2.42 73.6 38.4 ##第10列为小麦的产量 ##其余列为小麦生长不同阶段的天气情况 task_regr = as_task_regr(Iowa, target = "Yield") 1、KNN 基于KNN,解决分类任务的步骤之前已经学习过,可参考之前的学习笔记; 而用KNN解决回归问题与之十分类似,只是最后一步变为取k的最近样本的均值。(在分类问题中是取众数) 1.1 确定学习方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ##(1) 定义学习器 learner = lrn("regr.kknn") learner$param_set #主要参数为k #默认scale为TRUE,即对预测变量进行标准化 ##(2) 超参数 search_space = ps( k = p_int(lower = 3, upper = 15) ) design = data.frame(k = 3:15) %>% as.data.table() ##(3) 交叉验证与评价指标 resampling = rsmp("cv") measure = msr("regr.mse") 1.2 选出最优超参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 instance = TuningInstanceSingleCrit$new( task = task_regr, learner = learner, resampling = resampling, measure = measure, terminator = trm("none"), search_space = search_space ) tuner = tnr("design_points", design = design) future::plan("multisession") tuner$optimize(instance) #历史记录 as.data.table(instance$archive)[,1:2] %>% head() # k regr.mse # 1: 3 98.39484 # 2: 4 95.16022 # 3: 5 94.21570 # 4: 6 93.94832 # 5: 7 93.65615 # 6: 8 93.95614 #最优超参数结果 instance$result_learner_param_vals #$k #[1] 7 instance$result_y # regr.mse # 93.65615 1.3 训练最终模型 1 2 3 learner$param_set$values$k = instance$result_learner_param_vals$k learner$train(task_regr) learner$model 2、随机森林 由许多决策树组成的随机森林同样可以用于解决回归问题; ...
降维是指在保留尽可能多原始数据条件下,将许多变量(成百上千)转换为少数的、不相关的变量,从而有利于后序的数据分析与可视化。而主成分分析(PCA, Principal Component Analysis)是最常用的无监督降维算法。 ...
算法简介 t-SNE 正态分布密度函数 ,其中σ表示标准差,μ表示均值 第一步:计算高维空间中任意两样本点的欧几里得距离。 第二步:对于任一特定节点,将其余节点与之的距离转换为以该节点为中心的正态分布的概率值。 ...
1、算法简介 1.1 不同种K均值算法 k均值是常用的聚类算法之一。 (1)首先需要预先定义样本集中存在多少种聚类(假设为k),即数据集中处在K个真正意义上的质心。 (2)然后随机初始化k个质心,每个质心具有与样本数据相同维度的变量值。 ...
1、层次聚类简介 1.1 计算步骤 层次聚类hierarchical clustering常用的是自下而上的聚合法(Agglomerative)。与之相对的是自顶而下的分裂法(Division)。 ...
1、算法与工具简介 1.1 EM算法 EM, Expectation-Maximization 期望最大化算法 混合分布:来自两种或两种以上概率分布(高斯分布最典型)的随机数据组成的一组混合数据所形成的分布。 混合模型聚类:识别混合分布中,样本的原始分布,从而进行聚类(一种原始分布对应一个聚类),属于软聚类。 ...
一、数据预处理 1. 数据拆分 sklearn.model_selection.train_test_split() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split import pandas as pd wine = load_wine() # 字典 feats = wine["data"] feats_name = wine["feature_names"] feats_df = pd.DataFrame(feats, columns=feats_name) targets = wine["target"].reshape((-1,1)) #train_test_split()第一个参数是一个数据集或者多个数据集(行数相同) #数据集类型可以是pandas表格,numpy数组,甚至list列表 train_X, test_X = train_test_split(feats_df, test_size=0.2, random_state=42) train_X.shape, test_X.shape # ((142, 13), (36, 13)) train_X, test_X, train_y, test_y = train_test_split(feats_df, targets, test_size=0.2, random_state=42) train_X.shape, test_X.shape, train_y.shape, test_y.shape # (142, 13), (36, 13), (142, 1), (36, 1)) ##设置stratify参数,对某一分类文本列进行分层拆分数据集 train_X, test_X, train_y, test_y = train_test_split(feats_df, targets, test_size=0.2, random_state=42, stratify =targets) pd.DataFrame(train_y).value_counts(normalize=True) pd.DataFrame(test_y).value_counts(normalize=True) 2. 数据转换 fit–transform流程,一般返回数组 ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import pandas as pd from sklearn.datasets import load_wine from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier tree_classif = DecisionTreeClassifier() wine = load_wine() # 字典 feats = wine["data"] feats_name = wine["feature_names"] feats_df = pd.DataFrame(feats, columns=feats_name) targets = wine["target"].reshape((-1,1)) #feats_df.shape, targets.shape train_X, test_X, train_y, test_y = train_test_split(feats_df, targets, test_size=0.2, random_state=42) train_X.shape, test_X.shape, train_y.shape, test_y.shape # ((142, 13), (36, 13), (142, 1), (36, 1)) 一、交叉验证 https://scikit-learn.org/stable/modules/cross_validation.html ...