
机器学习
机器学习
_卷心菜_
一只努力鸭!
展开
-
为什么要训练数据集和测试数据集——模型的泛化能力
首先,自定义与上一节同样的数据集。对数据进行 train test split,对测试集数据与预测数据进行均方误差分析:from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, random_state=666)from sklearn.linear_model import LinearRegressionfrom sklearn.m原创 2021-04-28 11:28:30 · 1486 阅读 · 0 评论 -
欠拟合和过拟合
和上一节一样自定义数据集并绘制散点图:import numpy as npimport matplotlib.pyplot as pltnp.random.seed(666)x = np.random.uniform(-3.0, 3.0, size=100)X = x.reshape(-1, 1)y = 0.5 * x**2 + x + 2 +np.random.normal(0, 1, size=100)plt.scatter(X, y)plt.show()使用线性回归进行拟合:f原创 2021-04-27 21:45:22 · 159 阅读 · 0 评论 -
sklearn 中的多项式回归和 Pipeline
关于多项式回归在 sklearn 中的封装:import numpy as npimport matplotlib.pyplot as pltx = np.random.uniform(-3, 3, size=100)X = x.reshape(-1, 1)y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, size=100)from sklearn.preprocessing import PolynomialFeaturespoly = Po原创 2021-04-27 19:52:04 · 352 阅读 · 4 评论 -
多项式回归
首先,自定义数据集,使用 y = 0.5 * x**2 + x + 2 函数。import numpy as npimport matplotlib.pyplot as pltx = np.random.uniform(-3, 3, size=100)X = x.reshape(-1, 1)y = 0.5 * x**2 + x + 2 + np.random.normal(0, 1, size=100)plt.scatter(X, y)plt.show()绘制散点图如下:用线性..原创 2021-04-26 21:28:38 · 133 阅读 · 0 评论 -
Stacking
Stacking 用上图可以解释,以三种算法训练的模型结果作为输入再次训练出一种模型,用这个模型的结果作为结果。原创 2021-01-28 22:22:05 · 121 阅读 · 0 评论 -
Ada Boosting 和 Gradiernt Boosting
from sklearn.model_selection import train_test_splitX_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666)from sklearn.ensemble import AdaBoostClassifierfrom sklearn.tree import DecisionTreeClassifierada_clf = AdaBoostClassifier(Deci.原创 2021-01-28 22:08:20 · 231 阅读 · 0 评论 -
随机森林和Extra-Trees
from sklearn.ensemble import RandomForestClassifierrf_clf = RandomForestClassifier(n_estimators=500,random_state=666,oob_score=True,n_jobs=-1)rf_clf.fit(X,y)rf_clf.oob_score_结果:0.896rf_clf2 = RandomForestClassifier(n_estimators=500,max_leaf_nodes=16.原创 2021-01-28 17:40:37 · 850 阅读 · 0 评论 -
oob(out-of-bag)和关于bagging的更多讨论
不用 train_test_split#%% 使用oobfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import BaggingClassifierbagging_clf = BaggingClassifier(DecisionTreeClassifier(), n_estimators=500,max_samples=100, # 集原创 2021-01-27 23:05:31 · 535 阅读 · 0 评论 -
Bagging和Pasting
同样实验前加载和上一节相同的数据集#%% 使用Baggingfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import BaggingClassifierbagging_clf = BaggingClassifier(DecisionTreeClassifier(), n_estimators=500,max_samples=100...原创 2021-01-27 22:25:59 · 284 阅读 · 0 评论 -
softVoting Classifier
还是加载上一节的数据#%% soft voting classifiervoting_clf2 = VotingClassifier(estimators=[ ('log_clf',LogisticRegression()), ('svm_clf',SVC(probability=True)), ('dt_clf',DecisionTreeClassifier())],voting='soft') voting_clf2.fit(X_train,y_train)vo原创 2021-01-27 21:44:24 · 201 阅读 · 0 评论 -
集成学习
投票,少数服从多数投票的一种分类器:Voting Classifier加载数据集import numpy as npimport matplotlib.pyplot as pltfrom sklearn import datasetsX,y = datasets.make_moons(n_samples=500,noise=0.3,random_state=42)from sklearn.model_selection import train_test_splitX_train,X.原创 2021-01-27 21:11:56 · 111 阅读 · 0 评论 -
scikit-learn 中的 PCA
scikit-learn 中的PCAfrom sklearn.decomposition import PCApca = PCA(n_components=1)pca.fit(X)X_reduction = pca.transform(X)X_restore = pca.inverse_transform(X_reduction)plt.scatter(X[:,0],X[:,1],color='b',alpha=0.5)plt.scatter(X_restore[:,0],X_rest原创 2020-12-22 10:39:29 · 580 阅读 · 0 评论 -
高维数据映射为低维数据
从高维向低维映射,其中 k < n恢复为原来的维度,k < n ,恢复后信息是有丢失的代码实现封装 PCA 类:import numpy as npclass PCA: def __init__(self,n_components): """初始化PCA""" assert n_components >= 1,"n_components must be valid" self.n_components = n_com原创 2020-12-21 21:13:12 · 1395 阅读 · 0 评论 -
求数据的前 n 个主成分
主成分分析第二主成分就是在新的数据上求第一主成分。代码实现首先,根据上节求出数据的第一主成分下面求第二主成分#%% 第二主成分#X2 = np.empty(X.shape)#for i in range(len(X)):# X2[i] = X[i] - X[i].dot(w) * wX2 = X - X.dot(w).reshape(-1,1) * w #此行可代替上面三行plt.scatter(X2[:,0],X2[:,1])plt.show()图像与第一主成分垂原创 2020-12-20 23:07:03 · 530 阅读 · 0 评论 -
使用梯度上升法求解 PCA 问题
代码实现:import numpy as np import matplotlib.pyplot as pltX = np.empty((100,2))X[:,0] = np.random.uniform(0.,100.,size=100)X[:,1] = 0.75 * X[:,0] + 3. + np.random.normal(0,10.,size=100)plt.scatter(X[:,0],X[:,1])plt.show()结果:#%% demeandef dem.原创 2020-12-20 20:55:08 · 153 阅读 · 0 评论 -
什么是PCA?
主成分分析一个非监督的机器学习算法主要用于数据的降维通过降维,可以发现更便于人类理解的特征其他应用:可视化;去噪对于上图,如何找到这个样本间间距最大的轴?如何定义样本间间距?使用方差找到一个轴,使得样本空间的所有点映射到这个轴后,方差最大将样例的均值归为0(demean)【所有样本减去这批样本的均值】此时即此时这就成了一个目标函数的最优化问题,可以使用梯度上升法解决。不要将 PCA 和 线性回归 搞混了...原创 2020-12-16 19:33:02 · 799 阅读 · 0 评论 -
调试梯度下降法
如图,关于梯度的调试,通过不求导的方式来确定梯度计算的准确性。在某点的两边各取一点,通过式来得到某点的梯度。#%% 如何调试梯度import numpy as npimport matplotlib.pyplot as pltnp.random.seed(666)X = np.random.random(size=(1000,10))true_theta = np.arange(1,12,dtype=float)X_b = np.hstack([np.ones((len(X),原创 2020-12-16 16:41:36 · 162 阅读 · 0 评论 -
scikit-learn 中的随机梯度下降法
改进封装随机梯度下降法在线性回归中的使用:def fit_sgd(self, X_train, y_train, n_iters=5, t0=5, t1=50): """根据训练数据集X_train, y_train, 使用梯度下降法训练Linear Regression模型""" assert X_train.shape[0] == y_train.shape[0], \ "the size of X_train must be equal to the size of原创 2020-12-14 21:49:17 · 277 阅读 · 0 评论 -
随机梯度下降法
批量梯度下降法 Batch Gradient Descent对于上式,任意取 i 的一个值,则有下式:随机梯度下降的方式可用下图来表示可看出,它不能保证每次得到的方向都是梯度减小的方向,更不能保证每次都是减小速度最快的方向。这样,学习率 eta 的取值就变得非常重要。我们模拟退火的思想,取代码实现先使用之前的方法实现import numpy as npimport matplotlib.pyplot as pltm = 100000x = np.random.normal(siz原创 2020-12-06 19:35:25 · 434 阅读 · 2 评论 -
梯度下降的向量化和数据标准化
线性回归中梯度下降法的向量化将梯度式写为此处,X0(i)== 1。若将上式转置,则可分解为或者直接写为下式:由此,可对我们之前的代码进行修改,如下:def dJ(theta,X_b,y): # res = np.empty(len(theta)) # 对每个 theta 求导,所以开辟 len(theta) 个空间 # res[0] = np.sum(X_b.dot(theta) - y) #矩阵第 0 行 # for i in range(1,len(th原创 2020-12-05 15:49:00 · 500 阅读 · 0 评论 -
代码实现线性回归中的梯度下降法
在线性回归模型中使用梯度下降法定义数据集import numpy as npimport matplotlib.pyplot as pltnp.random.seed(666) # 添加随机种子x = 2 * np.random.random(size=100) # 自己定义数据集y = x * 3. + 4. + np.random.normal(size=100)X = x.reshape(-1,1) # 将 x 转换为 100 行 1 列的形式plt.scatter(原创 2020-12-03 19:27:18 · 467 阅读 · 0 评论 -
多元线性回归中的梯度下降法
线性回归中,目标是使:尽可能小。其中则,目标就转化为,使尽可能小。对 J(上式)在每一点 theta 求导其中由上面的求导式(即梯度)可看出,每一行都是 m 项求和得来的,即梯度与样本数量有关,这显然是不合理的。而我们希望我们求出的梯度是和 m 无关的,所以为每一项除以 m此时,目标又变为,使尽可能小。此处,也就是有时,我们取1/2 与 求导所得的 2 可以约掉,这个系数影响不大。...原创 2020-12-03 10:18:32 · 806 阅读 · 0 评论 -
梯度下降法模拟(二)
代码模拟首先绘制曲线plot_x = np.linspace(-1,6,141) # 将 -1 至 6 均分为 141 个点plot_y = (plot_x - 2.5) ** 2 - 1plt.plot(plot_x,plot_y) # 绘制曲线plt.show()接下来,首先定义函数 DJ 和 J:def dJ(theta): return 2 * (theta - 2.5) #对 plot_y 求导def J(theta): return (theta -原创 2020-12-02 19:54:53 · 201 阅读 · 0 评论 -
梯度下降法(一)
梯度下降法(Gradient Descent)不是一个机器学习算法(不能用于解决回归或分类问题)是一种基于搜索的最优化方法作用:最小化一个损失函数梯度上升法:最大化一个效用函数在机器学习领域,熟练掌握梯度法来求一个目标函数的最优值是非常重要的。如图,寻找一个theta 使得 损失函数J 最小 。每取一个 theta 值都对应一个 J。对于导数 dJ / d theta,在直线方程中,导数代表斜率;曲线方程中,导数代表切线斜率;在此图中,导数代表 theta 单位变化时,J相应的变化。由原创 2020-12-01 21:11:10 · 245 阅读 · 0 评论 -
使用scikit-learn解决回归问题
scikit-learn中的回归问题加载和上节同样的数据,通过代码from sklearn.model_selection import train_test_splitX_train,X_test,y_train,y_test = train_test_split(X,y,random_state=666) #将数据集分为训练集和测试集from sklearn.linear_model import LinearRegression #调用sklearn中的LinearRegressio原创 2020-12-01 19:23:16 · 521 阅读 · 0 评论 -
实现多元线性回归
标题由上节可知,多元线性回归的正规方程解为对于一共是 n+1 个数值但是,实际上我们的样本来说一共只有 n 个维度,其中每个系数都对应一个样本特征,从某种程度上来讲可以用于描述这些特征对于最终样本贡献的程度是怎样的,而截距和样本的特征是不相干的,只是一个偏移。...原创 2020-11-30 22:38:08 · 310 阅读 · 0 评论 -
多元线性回归和正规方程解
多元线性回归X表示第 i 个样本的(1,2,3,……n)个特征。一维多元函数如下,本节的多维多元函数(每个样本有多个特征)为:对于一元线性回归,我们的目标是使下式尽可能小,即,我们预测的结果和真实的结果的差的平方和尽可能的小。对于多元函数,我们的目标是找到使得尽可能小。令我们可认为此时设想有一个矩阵相应的可得一个列向量:因此,我们的目标可转变为求使得尽可能小。推导过程比较复杂,可直接使用如下推导结果(感兴趣的可以从书中或者互联网查阅推导结原创 2020-11-27 22:19:42 · 1779 阅读 · 0 评论 -
最好的衡量线性回归法的指标 R Squared
R Squared(1)给出最好的衡量线性回归法的指标 R Squared 的公式:R2值可分为四类:0 < R^2 <= 1R^2 越大越好。当我们的预测模型没有任何错误时,R^2得到最大值1当我们的模型等于基准模型时,R^2为0如果R^2 < 0,说明我们学习到的模型还不如基准模型,此时很有可能我们的数据不存在任何线性关系。(2)接着上节的代码继续补充可自行封装函数,也可直接调用 sklearn 中的 r2_score,两者所得结果一样。所得结果如下:r2_原创 2020-11-21 19:21:52 · 3200 阅读 · 2 评论 -
衡量线性回归法的指标 MSE、RMS、MAE
线性回归算法的评测(1)首先给出三种指标的公式均方误差 MSE(Mean Squared Error) :均方根误差 RMSE (Root Mean Squared Error) :平均绝对误差 MAE(Mean Absolute Error) :(2)下面具体编码实现一下这三种标准欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的原创 2020-11-21 13:57:46 · 1016 阅读 · 0 评论