您现在的位置是:主页 > news > 哪里可以做虚拟货币网站/免费拓客软件排行榜

哪里可以做虚拟货币网站/免费拓客软件排行榜

admin2025/5/11 14:36:21news

简介哪里可以做虚拟货币网站,免费拓客软件排行榜,wordpress转微信支付宝,回龙观网站建设第二章 使用sklearn构建完整的机器学习项目流程 文章目录第二章 使用sklearn构建完整的机器学习项目流程使用sklearn构建完整的回归项目1. 明确项目任务2. 收集数据集并选择合适的特征3. 选择度量模型性能的指标4. 选择具体的模型并进行训练&优化模型4.1选择具体的模型并进…

哪里可以做虚拟货币网站,免费拓客软件排行榜,wordpress转微信支付宝,回龙观网站建设第二章 使用sklearn构建完整的机器学习项目流程 文章目录第二章 使用sklearn构建完整的机器学习项目流程使用sklearn构建完整的回归项目1. 明确项目任务2. 收集数据集并选择合适的特征3. 选择度量模型性能的指标4. 选择具体的模型并进行训练&优化模型4.1选择具体的模型并进…

第二章 使用sklearn构建完整的机器学习项目流程

文章目录

  • 第二章 使用sklearn构建完整的机器学习项目流程
    • 使用sklearn构建完整的回归项目
    • 1. 明确项目任务
    • 2. 收集数据集并选择合适的特征
    • 3. 选择度量模型性能的指标
    • 4. 选择具体的模型并进行训练&优化模型
      • 4.1选择具体的模型并进行训练
        • 4.1.1 线性回归模型(linear regression)
          • (a)最小二乘法
          • (b)几何解释:
          • (c)概率视角:
          • 实例
        • 1.4.2 回归树
        • 1.4.3 支持向量机回归(SVR)
    • reference

一般来说,一个完整的机器学习项目分为以下步骤:

  1. 明确项目任务:回归/分类
  2. 收集数据集并选择合适的特征。
  3. 选择度量模型性能的指标。
  4. 选择具体的模型并进行训练&优化模型。
  5. 评估模型的性能并调参。

这里使用sklearn构建完整的回归项目demo

使用sklearn构建完整的回归项目

1. 明确项目任务

回归任务

2. 收集数据集并选择合适的特征

这里使用开源的Boston房价数据集。

# 引入相关科学计算包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline 
plt.style.use("ggplot")      
import seaborn as snsfrom sklearn import datasets
boston = datasets.load_boston()     # 返回一个类似于字典的类
X = boston.data
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
boston_data.head(6)

在这里插入图片描述
如图所示,这是前6条数据,有13个特征,一个标签(price)。具体解释如下:
各个特征的相关解释:

  • CRIM:各城镇的人均犯罪率
  • ZN:规划地段超过25,000平方英尺的住宅用地比例
  • INDUS:城镇非零售商业用地比例
  • CHAS:是否在查尔斯河边(=1是)
  • NOX:一氧化氮浓度(/千万分之一)
  • RM:每个住宅的平均房间数
  • AGE:1940年以前建造的自住房屋的比例
  • DIS:到波士顿五个就业中心的加权距离
  • RAD:放射状公路的可达性指数
  • TAX:全部价值的房产税率(每1万美元)
  • PTRATIO:按城镇分配的学生与教师比例
  • B:1000(Bk - 0.63)^2其中Bk是每个城镇的黑人比例
  • LSTAT:较低地位人口
  • Price:房价

3. 选择度量模型性能的指标

常见的指标如下:

  • MSE均方误差:MSE(y,y^)=1nsamples∑i=0nsamples−1(yi−y^i)2.\text{MSE}(y, \hat{y}) = \frac{1}{n_\text{samples}} \sum_{i=0}^{n_\text{samples} - 1} (y_i - \hat{y}_i)^2.MSE(y,y^)=nsamples1i=0nsamples1(yiy^i)2.
  • MAE平均绝对误差:MAE(y,y^)=1nsamples∑i=0nsamples−1∣yi−y^i∣\text{MAE}(y, \hat{y}) = \frac{1}{n_{\text{samples}}} \sum_{i=0}^{n_{\text{samples}}-1} \left| y_i - \hat{y}_i \right|MAE(y,y^)=nsamples1i=0nsamples1yiy^i
  • R2R^2R2决定系数:R2(y,y^)=1−∑i=1n(yi−y^i)2∑i=1n(yi−yˉ)2R^2(y, \hat{y}) = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}_i)^2}{\sum_{i=1}^{n} (y_i - \bar{y})^2}R2(y,y^)=1i=1n(yiyˉ)2i=1n(yiy^i)2
  • 解释方差得分:explained_variance(y,y^)=1−Var{y−y^}Var{y}explained\_{}variance(y, \hat{y}) = 1 - \frac{Var\{ y - \hat{y}\}}{Var\{y\}}explained_variance(y,y^)=1Var{y}Var{yy^}

其他评价指标
https://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics

这里采用MSE均方误差为模型的性能度量指标。就是欧式距离。

4. 选择具体的模型并进行训练&优化模型

4.1选择具体的模型并进行训练

4.1.1 线性回归模型(linear regression)

回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是使曲线到数据点的距离差异最小。而线性回归就是回归问题中的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w :

假设:数据集
D={(x1,y1),...,(xN,yN)}xi∈Rpyi∈R,i=1,2,...,NX=(x1,x2,...,xN)TY=(y1,y2,...,yN)TD = \{(x_1,y_1),...,(x_N,y_N) \} \\ x_i \in R^p\\ y_i \in R,i = 1,2,...,N\\ X = (x_1,x_2,...,x_N)^T\\ Y=(y_1,y_2,...,y_N)^T D={(x1,y1),...,(xN,yN)}xiRpyiR,i=1,2,...,NX=(x1,x2,...,xN)TY=(y1,y2,...,yN)T
假设X和Y之间存在线性关系,模型的具体形式为y^=f(w)=wTx\hat{y}=f(w) =w^Txy^=f(w)=wTx,如何求解损失函数最小时的w

几种思路来求解损失函数最小时的w。

(a)最小二乘法

基于均方误差最小化来进行模型求解的方法成为最小二乘法(least square method)。在线性回归中,最小二乘法就是试图找到一条直线,使得所有样本到直线上的欧式距离之和最小。

我们需要衡量真实值yiy_iyi与线性回归模型的预测值wTxiw^Tx_iwTxi之间的差距,在这里我们和使用二范数的平方和L(w)来描述这种差距,即:
L(w)=∑i=1N∣∣wTxi−yi∣∣22=∑i=1N(wTxi−yi)2=(wTXT−YT(wTXT−YT)T=wTXTXw−2wTXTY+YYTL(w) = \sum\limits_{i=1}^{N}||w^Tx_i-y_i||_2^2=\sum\limits_{i=1}^{N}(w^Tx_i-y_i)^2 \\ = (w^TX^T-Y^T(w^TX^T-Y^T)^T = w^TX^TXw - 2w^TX^TY+YY^T L(w)=i=1NwTxiyi22=i=1N(wTxiyi)2=(wTXTYT(wTXTYT)T=wTXTXw2wTXTY+YYT
因此,我们需要找到使得L(w)最小时对应的参数w,即:
w^=argminL(w)\hat{w} = argmin\;L(w) w^=argminL(w)
为了达到求解最小化L(w)问题,我们应用高等数学的知识,使用求导来解决这个问题:
∂L(w)∂w=2XTXw−2XTY=0\frac{\partial L(w)}{\partial w} = 2X^TXw-2X^TY = 0 wL(w)=2XTXw2XTY=0
因此:
w^=(XTX)−1XTY\hat{w} = (X^TX)^{-1}X^TY w^=(XTX)1XTY

(b)几何解释:

在线性代数中,我们知道两个向量a和b相互垂直可以得出:
<a,b>=a⋅b=aTb=0<a,b> = a \cdot b = a^Tb = 0<a,b>=ab=aTb=0
而平面X的法向量为Y-Xw,与平面X互相垂直,因此:
XT(Y−Xw)=0X^T(Y-Xw) = 0XT(YXw)=0
即:w=(XTX)−1XTYw = (X^TX)^{-1}X^TYw=(XTX)1XTY

©概率视角:

还不是很懂
假设噪声ϵ∽N(0,σ2),y=f(w)+ϵ=wTx+ϵ\epsilon \backsim N(0,\sigma^2),y=f(w)+\epsilon=w^Tx+\epsilonϵN(0,σ2),y=f(w)+ϵ=wTx+ϵ,因此:y∣xi,wN(wTx,σ2)y|x_i,w ~ N(w^Tx,\sigma^2)yxi,w N(wTx,σ2)
我们使用极大似然估计MLE对参数w进行估计:
L(w)=logP(Y∣X;w)=log∏i=1NP(yi∣xi;w)=∑i=1NlogP(yi∣xi;w)=∑i=1Nlog(12πσexp(−(yi−wTxi)22σ2))=∑i=1N[log(12πσ)−12σ2(yi−wTxi)2]argmaxwL(w)=argminw[l(w)=∑i=1N(yi−wTxi)2]因此:线性回归的最小二乘估计<==>噪声ϵ∽N(0,σ2)的极大似然估计L(w) = log\;P(Y|X;w) = log\;\prod_{i=1}^N P(y_i|x_i;w) = \sum\limits_{i=1}^{N} log\; P(y_i|x_i;w)\\ = \sum\limits_{i=1}^{N}log(\frac{1}{\sqrt{2\pi \sigma}}exp(-\frac{(y_i-w^Tx_i)^2}{2\sigma^2})) = \sum\limits_{i=1}^{N}[log(\frac{1}{\sqrt{2\pi}\sigma})-\frac{1}{2\sigma^2}(y_i-w^Tx_i)^2] \\ argmax_w L(w) = argmin_w[l(w) = \sum\limits_{i = 1}^{N}(y_i-w^Tx_i)^2]\\ 因此:线性回归的最小二乘估计<==>噪声\epsilon\backsim N(0,\sigma^2)的极大似然估计 L(w)=logP(YX;w)=logi=1NP(yixi;w)=i=1NlogP(yixi;w)=i=1Nlog(2πσ1exp(2σ2(yiwTxi)2))=i=1N[log(2πσ1)2σ21(yiwTxi)2]argmaxwL(w)=argminw[l(w)=i=1N(yiwTxi)2]线<==>ϵN(0,σ2)

实例
from sklearn import linear_model      # 引入线性回归方法
lin_reg = linear_model.LinearRegression()       # 创建线性回归的类
lin_reg.fit(X,y)        # 输入特征X和因变量y进行训练
print("模型系数:",lin_reg.coef_)             # 输出模型的系数
print("模型得分:",lin_reg.score(X,y))    # 输出模型的决定系数R^2

在这里插入图片描述
线性回归的推广:
(留坑,还不懂)

1.4.2 回归树

基于树的回归方法主要是依据分层分割的方式将特征空间划分为一系列简单的区域。对某个给定的待预测的自变量,用他所属区域中训练集的平均数或者众数对其进行预测。由于划分特征空间的分裂规则可以用树的形式进行概括,因此这类方法称为决策树方法。决策树由结点(node)和有向边(diredcted edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类别或者某个值。区域 𝑅1,𝑅2 等称为叶节点,将特征空间分开的点为内部节点。
这个图确实挺形象的。
在这里插入图片描述
建立回归树的过程大致可以分为以下两步:

  1. 将自变量的特征空间(即x(1),x(2),x(3),...,x(p)x^{(1)},x^{(2)},x^{(3)},...,x^{(p)}x(1),x(2),x(3),...,x(p))的可能取值构成的集合分割成J个互不重叠的区域R1,R2,...,RjR_1,R_2,...,R_jR1,R2,...,Rj
  2. 对落入区域RjR_jRj的每个观测值作相同的预测,预测值等于RjR_jRj上训练集的因变量的简单算术平均。

具体来说,就是:
a. 选择最优切分特征j以及该特征上的最优点s:
遍历特征j以及固定j后遍历切分点s,选择使得下式最小的(j,s)
minj,s[minc1∑xi∈R1(j,s)(yi−c1)2+minc2∑xi∈R2(j,s)(yi−c2)2]min_{j,s}[min_{c_1}\sum\limits_{x_i\in R_1(j,s)}(y_i-c_1)^2 + min_{c_2}\sum\limits_{x_i\in R_2(j,s)}(y_i-c_2)^2 ]minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]

b. 按照(j,s)分裂特征空间:
R1(j,s)={x∣xj≤s}和R2(j,s)={x∣xj>s},c^m=1Nm∑x∈Rm(j,s)yi,m=1,2R_1(j,s) = \{x|x^{j} \le s \}和R_2(j,s) = \{x|x^{j} > s \},\hat{c}_m = \frac{1}{N_m}\sum\limits_{x \in R_m(j,s)}y_i,\;m=1,2R1(j,s)={xxjs}R2(j,s)={xxj>s},c^m=Nm1xRm(j,s)yi,m=1,2
c. 继续调用步骤1,2直到满足停止条件,就是每个区域的样本数小于等于5。
d. 将特征空间划分为J个不同的区域,生成回归树:f(x)=∑m=1Jc^mI(x∈Rm)f(x) = \sum\limits_{m=1}^{J}\hat{c}_mI(x \in R_m)f(x)=m=1Jc^mI(xRm)

在这里插入图片描述
在这里插入图片描述
知乎上的这个图感觉挺好的。

分析一下分类决策树和回归决策树。
同样都是首先考虑如何选择划分点?其实这里还是用的最小二乘法作为目标函数的。分类决策树选择root节点考虑的是信息增益。
c步骤小于小于5不是很明白。其实就是和分类决策树一样,满足一定条件就剪枝吧。

但是,回归是得到具体的输出值?那么如何决定树中叶节点的输出值?这里使用的是均值。

树模型的优缺点:

  • 树模型的解释性强,在解释性方面可能比线性回归还要方便。
  • 树模型更接近人的决策方式。
  • 树模型可以用图来表示,非专业人士也可以轻松解读。
  • 树模型可以直接做定性的特征而不需要像线性回归一样哑元化。
  • 树模型能很好处理缺失值和异常值,对异常值不敏感,但是这个对线性模型来说却是致命的。
  • 树模型的预测准确性一般无法达到其他回归模型的水平,但是改进的方法很多。

sklearn实战
sklearn使用回归树的实例:
https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html?highlight=tree#sklearn.tree.DecisionTreeRegressor
sklearn.tree.DecisionTreeRegressor(*, criterion=‘mse’, splitter=‘best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort=‘deprecated’, ccp_alpha=0.0)

参数:(列举几个重要的,常用的,详情请看上面的官网)
criterion:{“ mse”,“ friedman_mse”,“ mae”},默认=“ mse”。衡量分割标准的函数 。
splitter:{“best”, “random”}, default=”best”。分割方式。
max_depth:树的最大深度。
min_samples_split:拆分内部节点所需的最少样本数,默认是2。
min_samples_leaf:在叶节点处需要的最小样本数。默认是1。
min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。默认是0。

from sklearn.tree import DecisionTreeRegressor    
reg_tree = DecisionTreeRegressor(criterion = "mse",min_samples_leaf = 5)//约束条件是叶节点需要的最小样本数是5
reg_tree.fit(X,y)
reg_tree.score(X,y)

这里使用的数据还是Boston,不是上图棒球大联盟。

1.4.3 支持向量机回归(SVR)

这个真的推导不动啊。我太菜了。

reference

https://github.com/datawhalechina/team-learning-data-mining/tree/master/EnsembleLearning
https://zhuanlan.zhihu.com/p/82054400