机器学习-模型集成

文章目录

  • 模型集成
    • 为什么要集成?
    • 模型集成要解决的问题
    • 主要的集成思想
  • Committees
    • 多个模型的结果进行融合。
    • Bagging
      • Bagging 特点
  • Boosting
    • AdaBoost
      • 算法过程
  • GBDT
    • 负梯度拟合
  • XGBoost
    • XGBoost 参数
      • 通用参数
      • booster 参数
      • 学习目标参数
    • 模型保存

模型集成

在这里插入图片描述

三个臭皮匠顶一个诸葛亮。

在这里插入图片描述

将多个模型融合在一起,得到一个单一模型。

应用:分类,回归,聚类,推荐…

为什么要集成?

结论:将多个模型融合会得到更好的精确度。

假设有 5 个 Accuracy = 70% 的分类器,相互独立。 采用投票的方式将 5 个分类器的结果进行集成:当一个样本被三个及以上的分类器判断为正例,那么集成模型就判断为正例

集成模型的精度为: C 5 2 ∗ 0. 7 3 ∗ 0. 3 2 + C 5 4 ∗ 0. 7 4 ∗ 0. 3 1 + C 5 5 ∗ 0. 7 5 = 83.7 % C_5^2*0.7^3*0.3^2+C_5^4*0.7^4*0.3^1+C_5^5*0.7^5=83.7\% C520.730.32+C540.740.31+C550.75=83.7%

如果是 101 个分类器(必须保证101个分类器相互独立,这个很难),那么 Accuracy = 99.9%

模型集成要解决的问题

  1. 如何获得多个模型,并且尽量相互独立。

  2. 如何将多模型的结果融合。

主要的集成思想

  1. Committees:委员会,就是投票。每个模型都有投票权。
  2. Boosting:贪心算法。如果要训练 n 个模型,每次训练一个模型,根据上一个模型训练的结果训练下一个模型。
  3. Space split:将一个很大问题空间分割成 n 块,每次训练一个模型。比如:决策树
  4. Mixture Model:空间软化分

Committees

多个模型的结果进行融合。

  • 分类问题:投票。
  • 回归问题:模型的输出的均值。

Bagging

解决问题:获得多个模型,并且尽量相互独立。也就是获取多个独立的训练集。可以并行训练模型。

Bagging(Bootstrap Aggregation)自举集成。

在这里插入图片描述

算法描述

对训练数据集进行等概率放回采样,得到多个训练数据集,分别训练模型。

带放回的采样概率分析:

训练集有 n 条样本,放回的随机抽出 n 个样本。问:每个样本被抽的概率是多少?

分析:
样本被抽到的概率: 1 n \frac{1}{n} n1

样本被抽到的概率: 1 − 1 n 1-\frac{1}{n} 1n1

n 次抽样都被抽到的概率: ( 1 − 1 n ) n (1-\frac{1}{n})^n (1n1)n

n 次抽样都至少一次被抽到的概率: 1 − ( 1 − 1 n ) n 1-(1-\frac{1}{n})^n 1(1n1)n

当 n 很大时:KaTeX parse error: Expected '}', got 'EOF' at end of input: …t_{n\rightarrow }{1-(1-\frac{1}{n})^n}=1-\frac{1}{e}=0.632$

Bagging 特点

Bagging 适合弱分类器

  • 不稳定:随机采样会得到不同的基分类器。
  • 每个基分分类器准确率略高于 50%。
  • Bagging较适合偏差小,方差大的基分类器(决策树)。

Bagging 不适合强分类器

  • 每个基分类器只有更少的训练样本,集成后反而不如单个分类器。

Boosting

核心思想:对训练数据集进行采样,当前分错的样本采样权重更大。

Boosting 工作机制:
在这里插入图片描述

迭代 k 次,得到 k 个模型。

多模型融合:不等权投票,加大误差率小的分类器的投票权重。

AdaBoost

解决问题:通过不同权重的重采样获取不过训练集。必须顺序训练模型。

算法过程

假设是一个二分类任务。

输入:训练集 T = [ ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) ] ; x i ∈ X ⊆ R n ; y i ∈ Y = [ − 1 , 1 ] T=[(x_1,y_1),(x_2,y_2),...,(x_n,y_n)]\,\,; x_i \in X \subseteq R^n\,;y_i \in Y=[-1,1] T=[(x1,y1),(x2,y2),...,(xn,yn)];xiXRn;yiY=[1,1]

输出:G(x)

  1. 初始化训练数据的权值分布(等权):

    D 1 = ( w 1 , 1 , w 1 , 2 , . . . , w 1 , i , . . . , w 1 , n ) ; w 1 , i = 1 N , i = 1 , 2 , . . . , N D_1=(w_{1,1},w_{1,2},...,w_{1,i},...,w_{1,n}) \,;w_{1,i}=\frac{1}{N},i = 1,2,...,N D1=(w1,1,w1,2,...,w1,i,...,w1,n);w1,i=N1,i=1,2,...,N

  2. 根据样本的权重,有放回抽样,进行 M 轮,得到 M 个模型。

    1. D m D_m Dm 上,训练出一个基分类器: G m ( x ) : X → [ − 1 , + 1 ] G_m(x):X\rightarrow [-1,+1] Gm(x):X[1,+1]

    2. 计算$G_m(x) $在训练集 D m D_m Dm 上的分类误差率: e m = P ( G m ( x i ) ! = y i ) = ∑ i − 1 N w m i I ( G m ( x i ) ! = y i ) e_m = P(G_m(x_i)!=y_i)=\sum_{i-1}^N{w_{mi}I(G_m(x_i)!=y_i)} em=P(Gm(xi)!=yi)=i1NwmiI(Gm(xi)!=yi)

      注意:加权分类误差率 w m i w_{mi} wmi

    3. 计算 G m ( x ) G_m(x) Gm(x) 的系数(模型的权重): a m = 1 2 l o g e 1 − e m e m a_m = \frac{1}{2}log_e{\frac{1-e_m}{e_m}} am=21logeem1em

    4. 更新训练数据的权值分布: D m + 1 = ( w m + 1 , 1 , w m + 1 , 2 , . . . , w m + 1 , i , . . . , w m + 1 , n ) D_{m+1}=(w_{m+1,1},w_{m+1,2},...,w_{m+1,i},...,w_{m+1,n}) Dm+1=(wm+1,1,wm+1,2,...,wm+1,i,...,wm+1,n)

      w m + 1 , i = w m , i Z m e − a m y i G m ( x i ) ; i = 1 , 2 , . . . , N w_{m+1,i} = \frac{w_{m,i}}{Z_m}e^{-a_my_iG_m(x_i)};i=1,2,...,N wm+1,i=Zmwm,ieamyiGm(xi);i=1,2,...,N

      Z m Z_m Zm规范化因子: Z m = ∑ i = 1 N e x p ( − a m y i G m ( x i ) ) Z_m=\sum_{i=1}^Nexp(-a_my_iG_m(x_i)) Zm=i=1Nexp(amyiGm(xi))

      Z m Z_m Zm 使 D m D_m Dm 成为一个分布。

  3. 构建基本分类器的线性组合: f ( x ) = ∑ i = 1 M a m G m ( x ) f(x)=\sum_{i=1}^M{a_mG_m(x)} f(x)=i=1MamGm(x)

    最终分类器: G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ i = 1 M a m G m ( x i ) ) G(x)=sign(f(x))=sign(\sum_{i=1}^M{a_mG_m(x_i)}) G(x)=sign(f(x))=sign(i=1MamGm(xi))

def ada_boost_train(data_set, label, num=40):class_list = []n = len(data_set)w = [1.0 / n] * nagg_class_est = [0.0] * nfor i in range(num):# 构建基分类器:决策树best_stump, error, class_est = build_stump(data_set, label, w)alpha = float(0.5 * math.log((1.0 - error) / error, math.e))best_stump["alpha"] = alphaclass_list.append(best_stump)print("alpha=%s, classEst=%s, bestStump=%s, error=%s " % (alpha, class_est, best_stump, error))expon = [0.0] * nfor i in range(n):expon[i] = -1 * alpha * label[i] * class_est[i]for i in range(n):w[i] = w[i] * math.e(expon[i])z = sum(w)w = [w_i / z for w_i in w]agg_class_est = [agg_class_est[i] + alpha * class_est[i] for i in range(n)]return class_list, agg_class_est

GBDT

Gradient Boosting Decision Tree,梯度提升决策树。

GBDT 的基分类器限定只能是:CART 回归树模型。

每一次对残差(实际值与预测值之差)进行拟合,最后把预测值相加得到最终的预测值。

比如:灯泡的寿命是10年,经过三棵树的训练(拟合10),第一颗树的训练结果为 5 年,那么残差为10-5=5年,在此基础上训练(拟合10 - 5 =5),第二棵树的训练结果为 3 年,残差为5-3=2年,接着第三棵树(拟合5 - 3 =2),训练结果为1年,残差为2-1=1年,结束,那么这棵树最终预测的寿命=5+3+1=9年,这个结果显然更接近于真实值。

在这里插入图片描述

残差拟合思想蛮简单,但是损失的拟合不好度量。

负梯度拟合

通过梯度提升的方法集成多个决策树。

大牛Freidman提出了用损失函数的负梯度来拟合本轮损失的近似值,进而拟合一个CART回归树。

​ 通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无论是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。

加法模型

y i = ∑ k = 1 K f k ( x i ) , f k ∈ F y_i = \sum_{k=1}^K{f_k(x_i)},f_k \in F yi=k=1Kfk(xi),fkF

如何学习加法模型?

前向分布算法(forward stagewise algorithm),因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数(结构),逐步逼近优化目标函数,那么就可以简化复杂度。这一学习过程称之为 Boosting。

例如:
决策树的复杂度可以由正则项

$\Omega(f_t) = r*T+\frac{1}{2}\lambda \sum_{j=1}T{w_j2} $

  • T:树的叶子节点数量
  • w:叶子节点对应的值向量的 L2 范数
    节点分裂收益

假设当前节点为 C ,分裂后左孩子节点为 L,右孩子节点为 R。obj 为目标函数值。

G a i n = o b j c − o b j L − o b j R Gain = obj_c - obj_L - obj_R Gain=objcobjLobjR

G a i n = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ] − r Gain = \frac{1}{2}[\frac{G_L^2}{H_L+\lambda} +\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda} ] - r Gain=21[HL+λGL2+HR+λGR2HL+HR+λ(GL+GR)2]r

− r -r r 表示:因为增加了树的复杂性(该分裂增加了一个叶子节点)带来的惩罚。

参考:https://cloud.tencent.com/developer/article/1005611

XGBoost

​ XGBoost是一种集成学习算法,通过CART 回归树,每一次对残差(实际值与预测值之差)进行拟合,最后把预测值相加得到最终的预测值。

​ XGBoost 中树都是二叉树。

​ 比如:灯泡的寿命是10年,经过三棵树的训练(拟合10),第一颗树的训练结果为 5 年,那么残差为10-5=5年,在此基础上训练(拟合10 - 5 =5),第二棵树的训练结果为 3 年,残差为5-3=2年,接着第三棵树(拟合5 - 3 =2),训练结果为1年,残差为2-1=1年,结束,那么这棵树最终预测的寿命=5+3+1=9年,这个结果显然更接近于真实值。

在这里插入图片描述

XGBoost 特点

  1. w 是最优化求出来的,不是平均值或规则指定的,这是XGBoost的一个创新。
  2. loss function中包含了正则化防止过拟合的技术。
  3. 支持自定义loss function,只要能泰勒展开(能求一阶导和二阶导)就行。
  4. 支持并行化,训练速度快,boosting技术中下一棵树依赖上述树的训练和预测,所以树与树之间应该是只能串行!但是在选择最佳分裂点,进行枚举的时候并行!(这个也是树形成最耗时的阶段)。
  5. XGBoost还特别设计了针对稀疏数据的算法。
  6. 可实现后剪枝
  7. 交叉验证,方便选择最好的参数
  8. 行采样、列采样,随机森林的套路(防止过拟合)。
  9. 预测值为每个回归树预测值的加和,这里也可以是加权。
  10. XGBoost还支持设置样本权重,这个权重体现在梯度g和二阶梯度h上,是不是有点adaboost的意思,重点关注某些样本。

XGBoost 参数

通用参数

  • n_estimators:

  • booster : 默认值 gbtree。

    选择基模型,gbtree:树模型,gbline:线性模型。

  • Silent :默认值为 0。

    Silent = 1静默模式开启,不会输出任何日志。0 帮助我们了解模型运行情况。

  • nthread:默认值最大可能的线程数。

    多线程的控制,应当输入系统的核数。如果希望使用cpu 全部核,就不要输入这个参数,算法会自动检测。

booster 参数

  1. eta[默认是0.3] 和GBM中的learning rate参数类似。通过减少每一步的权重,可以提高模型的鲁棒性。典型值0.01-0.2

  2. min_child_weight[默认是1] 决定最小叶子节点样本权重和。当它的值较大时,可以避免模型学习到局部的特殊样本。但如果这个值过高,会导致欠拟合。这个参数需要用cv来调整

  3. max_depth [默认是6] 树的最大深度,这个值也是用来避免过拟合的3-10

  4. max_leaf_nodes 树上最大的节点或叶子的数量,可以代替max_depth的作用,应为如果生成的是二叉树,一个深度为n的树最多生成2n个叶子,如果定义了这个参数max_depth会被忽略

  5. gamma[默认是0] 在节点分裂时,只有在分裂后损失函数的值下降了,才会分裂这个节点。Gamma指定了节点分裂所需的最小损失函数下降值。这个参数值越大,算法越保守。

  6. max_delta_step[默认是0] 这参数限制每颗树权重改变的最大步长。如果是0意味着没有约束。如果是正值那么这个算法会更保守,通常不需要设置。

  7. subsample[默认是1] 这个参数控制对于每棵树,随机采样的比例。减小这个参数的值算法会更加保守,避免过拟合。但是这个值设置的过小,它可能会导致欠拟合。典型值:0.5-1

  8. colsample_bytree[默认是1] 用来控制每颗树随机采样的列数的占比每一列是一个特征0.5-1

  9. colsample_bylevel[默认是1] 用来控制的每一级的每一次分裂,对列数的采样的占比。

  10. lambda[默认是1] 权重的L2正则化项

  11. alpha[默认是1] 权重的L1正则化项

  12. scale_pos_weight[默认是1] 各类样本十分不平衡时,把这个参数设置为一个正数,可以使算法更快收敛。

学习目标参数

  • Objective:默认值 reg:linear

    这个参数定义需要被最小化的损失函数。最常用的值有:binary:logistic二分类的逻辑回归,返回预测的概率非类别。multi:softmax使用softmax的多分类器,返回预测的类别。在这种情况下,你还要多设置一个参数:num_class类别数目。

  • eval_metric:默认值取决于objective参数的取值。

    对于有效数据的度量方法。对于回归问题,默认值是rmse,对于分类问题,默认是error。典型值有:rmse均方根误差;mae平均绝对误差;logloss负对数似然函数值;error二分类错误率;merror多分类错误率;mlogloss多分类损失函数;auc曲线下面积。

  • seed:默认是 0

    随机数的种子,设置它可以复现随机数据的结果,也可以用于调整参数。

模型保存

# 初始化 xgboost 实例
XGB = xgb.XGBClassifier(n_estimators=100, objective="binary:logistic")
# 训练
XGB.fit(x_train, y_train)    
# 保存模型
# 模型文件位置
XGB.get_booster().dump_model("/Users/dongyf/dongyf/data/status_rank/model.txt",fmap='/Users/dongyf/dongyf/data/status_rank/tmp_fmap')

fmap :指定导出模型的特征名。

fmap 的文件格式(以空分隔):共三列

Feature_id featrue_name (q or i or int)

  • feature_id:从 0 开始直到特征的个数为止,从小到大列。
  • Feature_name:model 要指定的 name
  • 第三列
    • q 表示是数字特征,可以省略 int 表示特征为整数
    • i 表示是二分类特征

fmap 文件

0 user_stock_score q
1 status_uid q
2 time q
3 allSymbolsCharLength q
4 allSymbolsSize q
5 contentLength q
6 favCount q
7 followerCount q
8 likeCount q
9 replyCount q
10 retweetCount q
11 staticScore q
12 symbolAccessOrde q

模式为:

booster[0]:
0:[replyCount<3.5] yes=1,no=2,missing=11:[staticScore<16.7780495] yes=3,no=4,missing=33:[status_uid<1.00048115e+09] yes=7,no=8,missing=77:[time<61080400] yes=15,no=16,missing=1515:[time<60873856] yes=31,no=32,missing=3131:[contentLength<47.5] yes=61,no=62,missing=6161:leaf=-0.49173915462:leaf=-0.55454546232:[time<60969072] yes=63,no=64,missing=6363:leaf=-0.066666670164:leaf=0.15000000616:leaf=-0.5651056178:[staticScore<10.0133038] yes=17,no=18,missing=1717:[status_uid<1.00948416e+09] yes=33,no=34,missing=3333:[time<19740952] yes=65,no=66,missing=6565:leaf=0.15000000666:leaf=-0.16363637134:[favCount<20.5] yes=67,no=68,missing=6767:leaf=-0.53034782468:leaf=-0.4732984318:[contentLength<13.5] yes=35,no=36,missing=3535:[contentLength<12.5] yes=69,no=70,missing=6969:leaf=-0.44347828670:leaf=-0.092307701736:[time<462659840] yes=71,no=72,missing=7171:leaf=-0.49894741272:leaf=-0.272727281

参考:https://blog.csdn.net/Jarry_cm/article/details/104279528

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548727.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx的核心架构和设计原理

Nginx 是一个免费的、开源的、高性能 Http 服务器和反向代理。Nginx 的架构设计是为了提供高性能、稳定性和可扩展性。 Nginx 的主要架构组件和工作原理&#xff1a; 1、Master 进程&#xff1a;Nginx 的运行始于一个 master 进程&#xff0c;它负责管理所有的工作进程。mast…

MySQL递归查询笔记

目录 一、创建表结构和插入数据 二、查询所有子节点 三、查询所有父节点 四、查询指定节点的根节点 五、查询所有兄弟节点&#xff08;同级节点&#xff09; 六、获取祖先节点及其所有子节点 七、查询每个节点之间的层级关系 八、查询指定节点之间的层级关系 一、创建表…

Docker配置阿里云镜像加速器,拉取Tomcat,使用云服务器访问Tomcat容器

一、简介与概述 1.Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。 2. Doc…

数据结构编程实践20讲(Python版)—03栈

本文目录 03 栈 StackS1 说明S2 示例基于列表的实现基于链表的实现 S3 问题&#xff1a;复杂嵌套结构的括号匹配问题求解思路Python3程序 S4 问题&#xff1a;基于栈的阶乘计算VS递归实现求解思路Python3程序 S5 问题&#xff1a;逆波兰表示法(后缀表达式)求值求解思路Python3程…

华为GaussDB数据库之Yukon安装与使用

一、Yukon简介 Yukon&#xff08;禹贡&#xff09;&#xff0c;基于openGauss、PostgreSQL、GaussDB数据库扩展地理空间数据的存储和管理能力&#xff0c;提供专业的GIS&#xff08;Geographic Information System&#xff09;功能&#xff0c;赋能传统关系型数据库。 Yukon 支…

Go基础编程 - 15 - 延迟调用(defer)

延迟调用 defer 1. 特性2. 常用用途3. defer 执行顺序&#xff1a;同函数内先进后出4. defer 闭包5. defer 陷阱 上一篇&#xff1a;泛型 1. 特性 1. 关键字 defer 用于注册延迟调用。 2. defer 调用直到 return 前才被执行。 3. 同函数内多个 defer 语句&#xff0c;按先进后…

怎么绕开华为纯净模式安装软件

我是标题 众所周不知&#xff0c;华为鸿蒙系统自带纯净模式&#xff0c;而且 没法关闭 : ) 我反正没找到关闭键 以前或许会有提示&#xff0c;无视风险&#xff0c;“仍要安装”。但我这次遇到的问题是&#xff0c;根本没有这个选项&#xff0c;只有“应用市场”和“取消”&…

数据结构:二叉树的遍历和线索二叉树

二叉树的遍历 二叉树的遍历是二叉树的一种重要的操作&#xff0c;指按照某种顺序访问树中的每个节点&#xff0c;并且每个节点仅被访问一次。常见的遍历方式有四种&#xff1a;前序遍历、中序遍历、后序遍历和层次遍历&#xff08;或称为广度优先遍历&#xff09;。 二叉树的…

物联网系统中LCD屏主流驱动方案详解

01 物联网系统中为什么要使用LCD驱动芯片 在物联网系统中使用LCD驱动芯片的原因主要有以下几点&#xff1a; 节省资源 1、减少IO端口占用&#xff1a;在物联网设备中&#xff0c;单片机或其他主控芯片的IO资源通常非常有限。LCD驱动芯片可以通过简单的接口&#xff08;如SP…

基于Hive和Hadoop的白酒分析系统

本项目是一个基于大数据技术的白酒分析系统&#xff0c;旨在为用户提供全面的白酒市场信息和深入的价格分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark 为核…

jenkins项目发布基础

随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题。Jenkins 自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,…

从Linux系统的角度看待文件-基础IO

目录 从Linux系统的角度看待文件 系统文件I/O open write read 文件操作的本质 vim中批量注释的方法 从Linux系统的角度看待文件 关于文件的共识&#xff1a; 1.空文件也要占用磁盘空间 2.文件内容属性 3.文件操作包括文件内容/文件属性/文件内容属性 4.文件路径文…

【Qt】前后端交互---DataCenter类

设计目的 前后端交互系统中&#xff0c;创建并使用数据核心类的目的就是让该类作为客户端的数据中心&#xff0c;也就是说其负责管理客户端的所有数据与服务器的网络通信。 数据持久化 初始化数据文件 该函数设计的目的就是用于检查所需要的文件和目录是否存在&#xff0c;如…

短视频矩阵系统源码开发/矩阵系统OEM搭建--源代码开发经验分享

短视频矩阵系统开发策略 短视频矩阵系统源码的原生开发方法 一、基于原生技术的短视频矩阵系统开发途径 原生编程语言&#xff1a;采用各平台专有的编程语言及开发工具&#xff0c;如iOS平台的Swift或Objective-C&#xff0c;以及平台的Java或Kotlin&#xff0c;确保应用性能与…

[贪心+数学/数学+位运算] 两种方法O(1)解决 消减整数

标题&#xff1a;[贪心数学/数学位运算] 两种方法O(1)解决 消减整数 个人主页水墨不写bug 目录 一、题目&#xff1a;消减整数(Newcoder) 二、题目分析 1.理解题意&#xff1a; 2.解决问题 解法详解一&#xff1a;贪心数学 解法一参考代码&#xff1a; 解法详解二&#xf…

WiFi无线连接管理安卓设备工具:WiFiADB

介绍 WiFi ADB 使您能够通过 WiFi TCP/IP 连接直接在设备上轻松调试和测试 Android 应用&#xff0c;无需使用 USB 数据线。在启用 WiFi 上的 ADB 后&#xff0c;打开控制台将电脑连接到设备。 手机和电脑在同一个WiFi然后电脑上运行adb connect x.x.x.x:x命令即可 下载 谷…

MindSearch 部署到Github Codespace 和 Hugging Face Space

和原有的CPU版本相比区别是把internstudio换成了github codespace。 教程是https://github.com/InternLM/Tutorial/blob/camp3/docs/L2/MindSearch/readme_github.md 复现步骤&#xff1a; 根据教材安装环境和创建硅基流动 API 然后启动前后端 然后按照教材部署到 Huggi…

一站式家装服务管理系统

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本一站式家装服务管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数…

基于Hive和Hadoop的病例分析系统

本项目是一个基于大数据技术的医疗病历分析系统&#xff0c;旨在为用户提供全面的病历信息和深入的医疗数据分析。系统采用 Hadoop 平台进行大规模数据存储和处理&#xff0c;利用 MapReduce 进行数据分析和处理&#xff0c;通过 Sqoop 实现数据的导入导出&#xff0c;以 Spark…

《征服数据结构》哈夫曼树(Huffman Tree)

摘要&#xff1a; 1&#xff0c;哈夫曼树的介绍 2&#xff0c;哈夫曼树的构造 3&#xff0c;哈夫曼树带权路径长度计算 4&#xff0c;哈夫曼树的编码 5&#xff0c;哈夫曼树的解码 1&#xff0c;哈夫曼树的介绍 哈夫曼树(Huffman Tree)也叫霍夫曼树&#xff0c;或者赫夫曼树&am…