首页 > 其他分享 >Machine Learning的学习旅途

Machine Learning的学习旅途

时间:2024-10-17 12:32:50浏览次数:8  
标签:plt random Machine print train Learning theta np 旅途

交叉验证

cross_val_score
cross_val_score 是 Scikit-learn 中的一个函数,用于执行交叉验证(cross-validation),它可以帮助评估模型的泛化能力。交叉验证是一种常见的模型评估方法,通过将数据集分成多个训练和测试集,避免模型过拟合并评估它在不同数据划分上的表现。

使用及常见参数

from sklearn.model_selection import cross_val_score
scores = cross_val_score(estimator, X, y, cv=5, scoring='accuracy')
  • estimator:你要评估的模型,例如 SGDClassifier、RandomForestClassifier 等。它需要实现 fit 和 predict 方法。
  • X:特征矩阵,包含训练数据的特征。
  • y:标签数组,包含训练数据的目标值(标签)。
  • cv:指定交叉验证的折数(默认值是 5)。cv=5 表示将数据分成 5 份,其中 4 份用于训练,1 份用于验证,交叉验证会重复 5 次,每次使用不同的验证集。
  • scoring:评估指标,决定了使用什么方法来评估模型的性能。例如,'accuracy' 表示使用准确率来评估模型。其他常见选项包括 'precision'、'recall'、'f1' 等。

除了上述调用corss_val_score的方式外,我们还可以自定义地对数据进行切分,这时候需要用到StratifiedKFold

from sklearn.model_selection import StratifiedKFold
from sklearn.base import clone

skflods = StratifiedKFold(n_splits=3, shuffle=True, random_state=42) # n_splits表示将数据切成几份,默认值是3
for train_index, test_index in skflods.split(X_train, y_train_5):
    clone_clf = clone(sgd_clf)
    X_train_flods = X_train[train_index]
    y_train_flods = y_train_5[train_index]
    X_test_flods = X_train[test_index]
    y_test_flods = y_train_5[test_index]

    clone_clf.fit(X_train_flods, y_train_flods)
    y_pred = clone_clf.predict(X_test_flods)
    num_correct = sum(y_pred == y_test_flods)
    print(num_correct / len(y_pred))

简单来说,StratifiedKFold 是一种手动控制交叉验证的划分方式,而 cross_val_score 是一个高层次的封装函数,它可以自动执行交叉验证并返回评分结果。

线性回归

在接下来的代码中我们将会随机生成数据,在此之前先简单介绍一下一些随机数生成器。

np.random.rand:生成 [0,1) 范围之间的随机数

np.random.rand(d0, d1, ..., dn) # d0, d1, ..., dn是每个维度的大小

np.random.randn:生成服从标准正态分布的随机数,均值为0,标准差为1

np.random.randn(d0, d1, ..., dn)

现在开始进行梯度下降算法的演示,首先我们需要获取数据,通过刚刚说的 np.random.rand 来随机生成100个特征x,以及我们自定义相对应的y

import numpy as np
import os
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
plt.rcParams['axes.labelsize'] = 14
plt.rcParams['xtick.labelsize'] = 12
plt.rcParams['ytick.labelsize'] = 12
import warnings
warnings.filterwarnings('ignore')

X = 2 * np.random.rand(100, 1) # 构造一个 100 × 1的矩阵
y = 3 * X + 4 + np.random.randn(100, 1)

我们可以将数据画出来方便我们查看

plt.plot(X, y, 'b.')
plt.xlabel('X_1')
plt.ylabel('y')
plt.axis([0, 2, 0, 15])
plt.show()

现在我们已经有了数据,现在要做的就是寻找合适的参数使得成功构建出一个model用来预测数据

参数直接求解

X_b = np.c_[np.ones((100, 1)), X] # 在原来特征前都加一列 1
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)

print(theta_best) # 第 0 位表示偏置项 b,第 1 位表示权重项 w
print(theta_best.shape)

现在我们得到了参数矩阵 \(theta\)_\(best\),可以做出一些预测看看它准不准

X_new = np.array([[0], [2]])
X_new_b = np.c_[np.ones((2, 1)), X_new]
# print(X_new_b)
# print(print(X_new_b.shape))
y_predict = X_new_b.dot(theta_best)
print(y_predict)

画图如下:

plt.plot(X_new, y_predict, 'r--')
plt.plot(X, y, 'b.')
plt.xlabel('X_1')
plt.ylabel('y')
plt.axis([0, 2, 0, 15])
plt.show()

以上方法虽然可以通过数学公式一步到位计算参数矩阵,但是并非在所有情况下都适用,比如有时候矩阵并不能求逆,更重要的是这没有体现出机器学习中的‘学习’二字。

因此我们需要用到 梯度下降

批量梯度下降

eta = 0.1
n_iterations = 1000
m = 100 # 样本个数,即之前定义的 100 * 1的矩阵
theta = np.random.randn(2, 1) # 随机初始化一个权重矩阵
for i in range(n_iterations):
    gradients = 1/m * X_b.T.dot(X_b.dot(theta) - y)
    theta -= eta * gradients
print(theta)

打印出 \(theta\)可以发现和之前用公式求出来的 \(theta\)_\(best\) 是一样的。
非常方便的是,scikit-learn中已经包含了一个叫 LinearRegression 的类,可以通过拟合数据来找到最优的回归模型。使用方法如下:

from sklearn.linear_model import LinearRegression

# X = 2 * np.random.rand(100, 1) # 构造一个 100 × 1的矩阵
# y = 3 * X + 4 + np.random.randn(100, 1)

lin_reg = LinearRegression()
lin_reg.fit(X, y)
w = lin_reg.coef_ # 模型中每个特征的权重
b = lin_reg.intercept_ # 模型的截距,即偏置项
print(w)
print(b)

标签:plt,random,Machine,print,train,Learning,theta,np,旅途
From: https://www.cnblogs.com/Kenny-Huang/p/18410918

相关文章

  • 机器学习(MachineLearning)(8)——模型评估与优化
    机器学习(MachineLearning)(1)——机器学习概述机器学习(MachineLearning)(2)——线性回归机器学习(MachineLearning)(3)——决策树回归机器学习(MachineLearning)(4)---------分类_逻辑回归机器学习(MachineLearning)(5)——分类_决策树机器学习(MachineLearning)(6)——分类_支持向量机机......
  • 【机器学习(八)】分类和回归任务-因子分解机(Factorization Machines,FM)-Sentosa_DSM
    @目录一、算法概念二、算法原理(一)FM表达式(二)时间复杂度(三)回归和分类三、算法优缺点(一)优点(二)缺点四、FM分类任务实现对比(一)数据加载和样本分区1、Python代码2、Sentosa_DSML社区版(二)模型训练1、Python代码2、Sentosa_DSML社区版(三)模型评估和模型可视化1、Python代码2、Sentosa_DSM......
  • DBPM: 增强时间序列对比学习:一种动态坏对挖掘方法《Towards Enhancing Time Series Co
    今天是2024年10月12日,思路枯竭,还是论文看的太少了,继续看论文.论文:TowardsEnhancingTimeSeriesContrastiveLearning:ADynamicBadPairMiningApproach或者是:TowardsEnhancingTimeSeriesContrastiveLearning:ADynamicBadPairMiningApproachGitHub:https://git......
  • Unifying Graph Convolution and Contrastive Learning in Collaborative Filtering
    目录概主要内容代码WuY.,ZhangL.,MoF.,ZhuT.,MaW.andNieJ.Unifyinggraphconvolutionandcontrastivelearningincollaborativefiltering.KDD,2024.概本文将推荐系统中的好用的对比学习和图卷积联系在一起,证明了它们间的一种等价性.主要内容一般的......
  • Contrastive Learning Is Spectral Clustering On Similarity Graph
    目录概主要内容原文代码TanZ.,ZhangY.,YangJ.andYuanY.Contrastivelearningisspectralclusteringonsimilaritygraph.ICLR,2024.概本文将对比学习与谱聚类联系在一起.主要内容我们知道,一般的对比学习形如:\[\min_{\theta}\quad\mathbb{E}_{x,x^+,......
  • FreqFed: A Frequency Analysis-Based Approach for Mitigating Poisoning Attacks in
    FreqFed:AFrequencyAnalysis-BasedApproachforMitigatingPoisoningAttacksinFederatedLearning--FreqFed:一种基于频率分析的联邦学习中缓解中毒攻击的方法来源摘要威胁模型设计目标所用方法FreqFed总结思考来源NetworkandDistributedSystemSecurity......
  • 机器学习(MachineLearning)(7)——分类_朴素贝叶斯
    机器学习(MachineLearning)(1)——机器学习概述机器学习(MachineLearning)(2)——线性回归机器学习(MachineLearning)(3)——决策树回归机器学习(MachineLearning)(4)---------分类_逻辑回归机器学习(MachineLearning)(5)——分类_决策树机器学习(MachineLearning)(6)——分类_支持向量机一......
  • [Paper Reading] HPT: Scaling Proprioceptive-Visual Learning with Heterogeneous P
    目录ScalingProprioceptive-VisualLearningwithHeterogeneousPre-trainedTransformersTL;DRMethodStemTrunkLossHeadExperiment训练资源效果可视化总结与发散相关链接资料查询ScalingProprioceptive-VisualLearningwithHeterogeneousPre-trainedTransformersScaling......
  • Communication-Efficient Learning of Deep Networks from Decentralized Data论文阅
    联邦学习开山之作Communication-EfficientLearningofDeepNetworksfromDecentralizedDataabstractIntroductionTheFederatedAveragingAlgorithmExperimentalResultsConclusionsandFutureWorkCommunication-EfficientLearningofDeepNetworksfromDec......
  • 基于QLearning强化学习的机器人避障和路径规划matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下(完整代码运行后无水印):  2.算法涉及理论知识概要       强化学习是一种机器学习方法,它使智能体能够在与环境交互的过程中学习如何采取行动以最大化累积奖励。Q-Learning是一种无模型的强化学习算法,特别适合于离散动作空......