当前位置: 首页 > 编程日记 > 正文

机器学习——XGBoost大杀器,XGBoost模型原理,XGBoost参数含义

0.随机森林的思考

  随机森林的决策树是分别采样建立的,各个决策树之间是相对独立的。那么,在我们得到了第k-1棵决策树之后,能否通过现有的样本和决策树的信息, 对第m颗树的建立产生有益的影响呢?在随机森林建立之后,采用的投票过程能否增加一定的权值呢?在选取样本的时候,我们能否对于分类错误的样本给予更大的权值,使之得到更多的重视呢?

1.什么是提升思想

提升是一个机器学习技术,可以用于回归和分类问题,它每一步产生一个弱预测模型,并加权累加到总的模型之中,如果每一步的弱预测模型生成都是依据损失函数的梯度方向,则称之为梯度提升。

  梯度提升算法首先给定一个目标损失函数,它的定义域是所有可行的弱函数集合(基函数);提升算法通过迭代的选择一个负梯度方向上的基函数来逐渐毕竟局部极小值。这种在函数域的梯度提升观点在机器学习的很多领域都用较大的影响。

  提升的理论意义是:如果一个问题存在弱分类器,则可以通过提升的办法得到强分类器。

 2.提升算法

  给定输入向量X和输出变量y组成的若干训练样本,(x1,y1),(x2,y2),.....,(xn,yn),目标是找到近似函数F(x),使得损失函数L(y,F(x))的损失值最小

  损失函数的经典定义:

假定最优函数为F*(x),即:

  假定F(x)是一族基函数fi(x)的加权和

  那么,对于上述的F(x),我们应该如何求解呢?

  我们很容易想到贪心的思路,当我们每一步得到的fi(x)都是最小的时候,它们相加的F(x)也应该是最小,即最优解,问题变成了我们应该如何求解fi(x)呢?

 贪心法在每次选择最优基函数f时,仍然比较困难,这时,我们想到了梯度下降的方法进行近似计算,我们将样本带入到基函数f得到f(x1),f(x2),f(x3),...,f(xn),从而L退化为向量L(y1,f(x1)),L(y2,f(x2)),L(y3,f(x3)),....,L(yn,f(xn)):

  上面的式子中,权值表示的是梯度的步长,我们可以使用线性搜索计算最优的步长:

 算法的步骤如下:

  初始时,给定模型为常数:

  对于m=1-M时:

    计算伪残差:

 使用数据计算拟合残差的基函数fm(x)

    计算步长:

    更新模型:

 在上述的梯度提升的算法中,典型的模型就是梯度提升决策树GBDT。

3.梯度提升决策树GBDT

  梯度提升的典型基函数即决策树(尤其是CART)

  在第m步的梯度提升是根据伪残差数据计算决策树tm(x)。决策树根据叶子节点的数目,对输入空间进行划分成不相交的区域,并且在每个区域中,给出某个类型的确定性预测,因此我们可以使用指示函数I(x),对于输入的x,tm(x)可以表示为

  其中,bjm是样本在Rjm节点上的预测值,Rjm表示第m颗树的j叶子节点。

  使用线性搜索计算学习率,最小化损失函数:

  进一步的,对树的每个区域分别计算步长,从而系数bjm被合并到步长中:

  对于上述的模型,我们也可以采取一些防止过拟合的措施,比如正则化。

 4.XGBoost算法

  根据Taylor展开式有:

  分别计算一阶导和二阶导:

  得到:

对于决策树的描述

  决策树是从根节点到叶结点的细化过程,落在相同的样本的预测值是相同的。假定决策树的叶结点数目为T,每个叶结点的权值构成向量W=(w1,w2,.....,wn),决策树则是构造如何使用特征得到划分,从而得到这些权值的过程。

  样本X落在叶结点q中,定义f为:ft(x)=wq(x),举例如下:

  对于正则项的定义,我们可以考虑叶结点的数目和叶权值,如使用叶结点总数和也权值平方和的加权,则也不是唯一的定义方式:

  由此,我们就能够计算目标函数了:

  目标函数的简化

上述的过程就是XGBoost的主要推导过程,相比于GDBT,XGBoost使用的是二阶的梯度信息,因而可以更快的在训练集上收敛。

 5.Python中的XGBoost

  在XGBoost中数据的加载是使用其特有的数据格式进行训练的,我们可以使用XGBoost中的xgb.DMatrix(x_train, label=y_train)函数进行数据的加载,xgb.DMatrix()也支持libsvm格式的数据,这是一种稀疏数据的存储方式,xgb.DMatrix()可以直接读取这种数据格式:

 libsvm数据格式是一种稀疏矩阵的表示方法,其中第1列为结果集,后面的每列含义为:该样本的特征序号:该样本对应的特征序号的值,对于特征数量多,且稀疏的时候非常的合适。

 1 import xgboost as xgb
 2 import numpy as np
 3 
 4 #读取libsvm数据
 5 data_train = xgb.DMatrix('12.agaricus_train.txt')
 6 data_test = xgb.DMatrix('12.agaricus_test.txt')
 7 
 8 
 9 #读取普通的数据
10 data_train = xgb.DMatrix(x_train, label=y_train)
11 data_test = xgb.DMatrix(x_test, label=y_test)
  使用xgb.train()对模型进行训练,我们 XGBoost 之前, 我们必须设置三种类型的参数: (常规参数)general parameters,(提升器参数)booster parameters和(任务参数)task parameters。

参数的含义如下:

 1 params = {
 2     'booster':'gbtree',
 3     'min_child_weight': 100,
 4     'eta': 0.1,
 5     'colsample_bytree': 0.7,
 6     'max_depth': 12,
 7     'subsample': 0.7,
 8     'alpha': 1,
 9     'gamma': 1,
10     'silent': 0,
11     'objective': 'reg:linear',
12     'verbose_eval': True,
13     'seed': 1
14 }

General Parameters 

  booster [default=gbtree]

    有两中模型可以选择gbtree和gblinear。gbtree使用基于树的模型进行提升计算,gblinear使用线性模型进行提升计算。缺省值为gbtree。
  silent [default=0]

    取0时表示打印出运行时信息,取1时表示以缄默方式运行,不打印运行时信息。缺省值为0。
  nthread [default to maximum number of threads available if not set]

    XGBoost运行时的线程数。缺省值是当前系统可以获得的最大线程数
  num_pbuffer [set automatically by xgboost, no need to be set by user]

    size of prediction buffer, normally set to number of training instances. The buffers are used to save the prediction results of last boosting step.
  num_feature [set automatically by xgboost, no need to be set by user]

    boosting过程中用到的特征维数,设置为特征个数。XGBoost会自动设置,不需要手工设置。
Booster Parameters
  eta [default=0.3]

    为了防止过拟合,更新过程中用到的收缩步长。在每次提升计算之后,算法会直接获得新特征的权重。 eta通过缩减特征的权重使提升计算过程更加保守。缺省值为0.3
    取值范围为:[0,1]
  gamma [default=0]

    minimum loss reduction required to make a further partition on a leaf node of the tree. the larger, the more conservative the algorithm will be.
  range: [0,∞]
  max_depth [default=6]

    树的最大深度。缺省值为6
    取值范围为:[1,∞]
  min_child_weight [default=1]

    孩子节点中最小的样本权重和。如果一个叶子节点的样本权重和小于min_child_weight则拆分过程结束。在现行回归模型中,这个参数是指建立每个模型所需要的最小样本数。
    取值范围为: [0,∞]
  max_delta_step [default=0]

    Maximum delta step we allow each tree’s weight estimation to be. If the value is set to 0, it means there is no constraint. If it is set to a positive value, it can help making the update step more     conservative. Usually this parameter is not needed, but it might help in logistic regression when class is extremely imbalanced. Set it to value of 1-10 might help control the update
    取值范围为:[0,∞]
  subsample [default=1]

    用于训练模型的子样本占整个样本集合的比例。如果设置为0.5则意味着XGBoost将随机的冲整个样本集合中随机的抽取出50%的子样本建立树模型,这能够防止过拟合。
    取值范围为:(0,1]
  colsample_bytree [default=1]
    在建立树时对特征采样的比例。缺省值为1
    取值范围:(0,1]
Task Parameters
  objective [ default=reg:linear ]
    定义学习任务及相应的学习目标,可选的目标函数如下:

    “reg:linear” –线性回归。
    “reg:logistic” –逻辑回归。
    “binary:logistic”–二分类的逻辑回归问题,输出为概率。
    “binary:logitraw”–二分类的逻辑回归问题,输出的结果为wTx。
    “count:poisson”–计数问题的poisson回归,输出结果为poisson分布。在poisson回归中,max_delta_step的缺省值为0.7。(used to safeguard optimization)
    “multi:softmax” –让XGBoost采用softmax目标函数处理多分类问题,同时需要设置参数num_class(类别个数)
    “multi:softprob” –和softmax一样,但是输出的是ndata * nclass的向量,可以将该向量reshape成ndata行nclass列的矩阵。没行数据表示样本所属于每个类别的概率。
    “rank:pairwise”–set XGBoost to do ranking task by minimizing the pairwise loss
  base_score [ default=0.5 ]

    the initial prediction score of all instances, global bias
  eval_metric [ default according to objective ]
    校验数据所需要的评价指标,不同的目标函数将会有缺省的评价指标(rmse for regression, and error for classification, mean average precision for ranking)
    用户可以添加多种评价指标,对于Python用户要以list传递参数对给程序,而不是map参数list参数不会覆盖’eval_metric’
    The choices are listed below:
      “rmse”: root mean square error
      “logloss”: negative log-likelihood
      “error”: Binary classification error rate. It is calculated as #(wrong cases)/#(all cases). For the predictions, the evaluation will regard the instances with prediction value larger than 0.5 as positive           instances, and the others as negative instances.
      “merror”: Multiclass classification error rate. It is calculated as #(wrong cases)/#(all cases).
      “mlogloss”: Multiclass logloss
      “auc”: Area under the curve for ranking evaluation.
      “ndcg”:Normalized Discounted Cumulative Gain
      “map”:Mean average precision
      “ndcg@n”,”map@n”: n can be assigned as an integer to cut off the top positions in the lists for evaluation.
      “ndcg-”,”map-”,”ndcg@n-”,”map@n-”: In XGBoost, NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate           these score as 0 to be consistent under some conditions. training repeatively
      “gamma-deviance”: [residual deviance for gamma regression]
  seed[ default=0 ]

    random number seed.

    随机数的种子。缺省值为0

  dtrain:训练的数据

  num_boost_round:这是指提升迭代的次数,也就是生成多少基模型

  evals:这是一个列表,用于对训练过程中进行评估列表中的元素。形式是evals = [(dtrain,'train'),(dval,'val')]或者是evals = [(dtrain,'train')],对于第一种情况,它使得我们可以在训练过程中观察验证集的效果

  obj:自定义目的函数

  feval:自定义评估函数

  maximize:是否对评估函数进行最大化

  early_stopping_rounds:早期停止次数 ,假设为100,验证集的误差迭代到一定程度在100次内不能再继续降低,就停止迭代。这要求evals 里至少有 一个元素,如果有多个,按最后一个去执行。返回的是最后的迭代次数(不是最好的)。如果early_stopping_rounds存在,则模型会生成三个属性,bst.best_score,bst.best_iteration和bst.best_ntree_limit

  evals_result:字典,存储在watchlist中的元素的评估结果。

  verbose_eval :(可以输入布尔型或数值型),也要求evals里至少有 一个元素。如果为True,则对evals中元素的评估结果会输出在结果中;如果输入数字,假设为5,则每隔5个迭代输出一次。

  learning_rates:每一次提升的学习率的列表,

  xgb_model:在训练之前用于加载的xgb model。
  看起来参数非常的多,但是我们在大部分的时候,只要指定一些调整的参数就行了。

1 data_train = xgb.DMatrix(x_train, label=y_train)
2 data_test = xgb.DMatrix(x_test, label=y_test)
3 watch_list = [(data_test, 'eval'), (data_train, 'train')]
4 param = {'max_depth': 3, 'eta':0.5, 'silent': 0, 'objective': 'multi:softmax', 'num_class': 3}
5 
6 bst = xgb.train(param, data_train, num_boost_round=15, evals=watch_list)
7 y_hat = bst.predict(data_test)

  我们采用随机生成的数据使用XGBoost模型来进行测试:

 1 import numpy as np
 2 import sklearn as sk
 3 from sklearn.model_selection import train_test_split
 4 import xgboost as xgb
 5 import matplotlib.pyplot as plt
 6 import matplotlib as mpl
 7 
 8 
 9 def markData():
10 
11     x1 = 5 + np.random.rand(30)*5
12     y1 = 8 + np.random.rand(30)*5
13 
14     x2 = 9 + np.random.rand(30) * 3
15     y2 = 1 + np.random.rand(30) * 5
16 
17     x3 = 4 + np.random.rand(30) * 5
18     y3 = 3 + np.random.rand(30) * 5
19 
20     x4 = 8 + np.random.rand(30) * 7
21     y4 = 5 + np.random.rand(30) * 5
22     # plt.figure()
23     # plt.plot(x1, y1, 'ro', linewidth=0.8, label='x1')
24     # plt.plot(x2, y2, 'ko', linewidth=0.8, label='x2')
25     # plt.plot(x3, y3, 'bo', linewidth=0.8, label='x3')
26     # plt.plot(x4, y4, 'go', linewidth=0.8, label='x4')
27     # plt.legend(loc="upper right",)
28     # plt.show()
29     # print(x1)
30     x = np.hstack((x1, x2, x3, x4))
31     y = np.hstack((y1, y2, y3, y4))
32     x = np.stack((x, y), axis=0).transpose()
33     # print(x)
34     # plt.figure()
35     # plt.plot(x[0:30, 0], x[0:30, 1], 'ro', linewidth=0.8)
36     # plt.plot(x[30:60, 0], x[30:60, 1], 'bo', linewidth=0.8)
37     # plt.plot(x[60:90, 0], x[60:90, 1], 'go', linewidth=0.8)
38     # plt.plot(x[90:120, 0], x[90:120, 1], 'ko', linewidth=0.8)
39     # plt.show()
40     y = np.zeros(120)
41     y[0:30] =0
42     y[30:60] = 1
43     y[60:90] = 2
44     y[90:120] =3
45     # print(y)
46     return x, y
47 
48 
49 if __name__ == '__main__':
50     x, y = markData()
51     x_train, x_test, y_train, y_test = train_test_split(x, y, train_size=0.75, random_state=1)
52     # print(x_train)
53     # print(y_train)
54     data_train = xgb.DMatrix(x_train, label=y_train)
55     data_test = xgb.DMatrix(x_test, label=y_test)
56     # print(data_train)
57     # print(data_test)
58 
59     # 定义xgb的模型参数
60     parms = {'max_depth': 3, 'eta': 0.5, 'slient': 0, 'objective': 'multi:softmax', 'num_class': 4}
61     watchlist = [(data_train, 'eval'), (data_test, 'train')]
62     bst = xgb.train(parms, data_train, num_boost_round=6, evals=watchlist)
63     y_hat = bst.predict(data_test)
64 
65     #计算准确率
66     print(np.mean(y_hat == y_test))
67 
68     # 绘制分类图片
69     N, M = 200, 200
70     x_min, x_max = np.min(x[:, 0]), np.max(x[:, 0])
71     y_min, y_max = np.min(x[:, 1]), np.max(x[:, 1])
72     x1 = np.linspace(x_min, x_max, N)
73     x2 = np.linspace(y_min, y_max, M)
74     tx, ty = np.meshgrid(x1, x2)
75     xx = np.stack((tx.flat, ty.flat), axis=1)
76     data_xx = xgb.DMatrix(xx)
77     yy = bst.predict(data_xx)
78     yy = yy.reshape(tx.shape)
79 
80     cmp_light = mpl.colors.ListedColormap(['#33FF33', '#FFCC66', '#FFF500', '#22CFCC'])
81     cmp_drak = mpl.colors.ListedColormap(['r', 'g', 'b', 'k'])
82 
83     plt.figure()
84     plt.pcolormesh(tx, ty, yy, cmap=cmp_light)
85     plt.scatter(x[:, 0], x[:, 1], c=y, edgecolors='k', cmap=cmp_drak)
86     plt.xlabel("x1")
87     plt.ylabel("x2")
88     plt.xlim(x_min, x_max)
89     plt.ylim(y_min, y_max)
90     plt.grid(True)
91     plt.show()

  运行结果如下:

转载于:https://www.cnblogs.com/baby-lily/p/10663328.html

相关文章:

使用存储过程更新数据库!成功了但是返回值为 -1 的变态问题的解决办法!

今天遇到个表态的问题!使用带事务的存储过程执行sql语句,看数据库里面插入更新都正常! 但是返回值一直为-1! 头那个大哦!先贴2个存储过程吧!看大侠们能否找到问题的存在 USE [My_DB] GO/****** Object: St…

poj2289二分图多重匹配

题意&#xff1a;给你一张二分图&#xff0c;求右边点到汇点的最小容量&#xff08;保证流量为n&#xff09;是多少 题解:二分答案&#xff0c;每次重新建边跑最大流&#xff0c;看是不是为n就好了 #include<map> #include<set> #include<cmath> #include<…

Express应用配置端口

Express应用设置端口方法1 静态修改--直接修改代码中配置的默认端口号方法2 动态修改--修改代码逻辑使其获取启动命令中的端口号参数相关文章在Express应用创建成功后&#xff0c;应用会自动配置一个端口号&#xff0c;比如3000&#xff0c;有时会遇到端口号被占用的情况&#…

Oracle中PL/SQL的循环语句

PL/SQL的三种形式的循环&#xff1a;1.LOOP&#xff08;无条件循环&#xff09;&#xff1a;loopstatements;end loop;2.WHILE&#xff08;有条件循环&#xff09;&#xff1a;while condition loopstatements;end loop;3.FOR&#xff08;固定次数循环&#xff09;&#xff1a;…

处理器调度算法

1. P117页,练习15&#xff1a;最高响应比 HRRF&#xff1a; 作业 提交时刻 运行时刻 开始时刻 完成时刻 周转时间/min 带权周转时间/min 1 10:00 2:00 10:00 12:00 120 120/120 2 10:10 1:00 12:25 13:25 195 195/60 3 10:25 0:25 12:00 12:25 120 …

bzoj4516

后缀自动机 留个板子 upd:大概懂了 每次新加入的npRight集合肯定只有最后一个位置&#xff0c;那么求所有长得不一样的子串贡献就是Max-Min1,因为Right集合只有这一个位置&#xff0c;所以这Max-Min1个子串只出现在最后一个位置。 #include<bits/stdc.h> using namespace…

npm : 无法加载文件 D:\...\nodejs\npm.ps1,因为在此系统上禁止运行脚本

问题&#xff1a; 在VSCode终端使用npm命令时&#xff0c;出现如下报错信息&#xff1a; npm : 无法加载文件 D:\ProgramFiles\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?Link ID135170 中的 …

Mybatis注解学习记录

Mybatis注解使用1. SQL语句映射1.1 Select注解&#xff1a;实现查询功能1.1.1 用法1.2 Insert注解&#xff1a;实现新增功能1.2.1 用法1.3 Update注解&#xff1a;实现更新功能1.3.1 用法1.4 Delete注解&#xff1a;实现删除功能1.4.1 用法2. 结果集映射2.1 Results注解&#x…

路由和交换机工作原理

路由器与交换机的工作原理 计算机网络往往由许多种不同类型的网络互连连接而成。如果几个计算机网络只是在物理上连接在一起&#xff0c;它们之间并不能进行通信&#xff0c;那么这种“互连”并没有什么实际意义。因此通常在谈到“互连”时&#xff0c;就已经暗示这些相互连接的…

嵌套选项卡自动播放

HTML <div class"box" id"box"><ul class"top" id"top"><li class"fl">专题</li><li class"fl">视频</li></ul><div class"clearFix" id"cont"…

Facebook 与 Google 正在主导在线身份验证市场

OpenID 公司 JanRain 的一项研究发现&#xff0c;用户在第三方网站进行身份验证时&#xff0c;最喜欢使用 Google 和 Facebook 的身份验证服务。Facebook 的验证服务 在媒体&#xff0c; 零售&#xff0c;技术等领域略微领先&#xff0c;而 JanRain 的17万份客户数据显示&#…

WIN2K/XP/2003 + APACHE + ASP + PHP + MYSQL 的简易实现

至目前总算完成了WIN2K/XP/2003 APACHE ASP PHP MYSQL这样一个建站项目&#xff0c;回过头来仔细想想也并不复杂。只是经过了反复的安装、卸载、研究、测试带找资料。真正的步骤却也没什么难的&#xff0c;但如果让你从头研究可能也是一件很头痛的事情了&#xff01;所以打…

.net 去除特殊字符

str Regex.Replace(str, "<script[^>]*?>.*?</script>", "", RegexOptions.IgnoreCase); //str为需要校验的字符 str Regex.Replace(str, "[~#$%^&\*()_\{}\|<>\/\\\[\]]", "", RegexOptions.IgnoreCase…

为TypeScript项目生成API文档

为TypeScript项目生成文档 使用typedoc为TypeScript项目生成API文档。 1. 使用typedoc生成HTML文档 需要安装 typedoc。 npm i typedoc可以通过命令行参数指定配置信息&#xff0c;也可以通过加载配置文件的方式加载配置信息。 本项目中使用加载配置文件typedoc.json的方式…

DropBox免费扩容到10G了

好久没有写博客了,郑重推荐下Dropbox这款同步软件,很多人有多台电脑,比如公司和家里一些文档需要同步更新,用U盘拷贝来拷贝去,不胜其烦.自然而然就想到用同步软件,而这方面DropBox从速度来说,当然是首屈一指的. 先说明DropBox的优点: 使用简单,去官网http://www.dropbox.com下…

子网划分实例与讲解

子网划分 分为两种&#xff1a;◆ 给定网络地址&#xff0c;划分子网。◆不给定网络地址&#xff0c;根据主机数量&#xff0c;自由确定网络地址&#xff0c;进而划分子网。【实例1】给定网络地址&#xff0c;划分子网。我们单位有计算机100台左右&#xff0c;原来都是在192.16…

使用Docsify搭建Markdown文件服务器

使用docsify快速生成文档网站1. 概述2. 安装 docsify-cli 工具3. 初始化项目4. 本地预览5. 多页文档6. 定制导航栏6.1 在index.html中添加导航栏6.2 添加导航栏配置文件6.3 下拉导航栏7. 封面设置7.1 设置封面参数7.2 自定义封面背景7.3 将封面设置为首页配置项elrepomaxLevell…

DirectX903D 颜色

颜色 颜色表示 颜色用RGB三元组表示。为红色&#xff08;red&#xff09;绿色&#xff08;Green&#xff09;蓝色&#xff08;Blue&#xff09;。 RGB数据可用两种不同的结构来保存。 1 D3DCOLOR结构 与DWORD类型完全相同。共有32位。各位被 分成四个8位项&#xff08;sectio…

JAVA SHA1 加密 对应 c# SHA1 加密

java: 1 public static String SHA1(String decript) {2 try {3 MessageDigest digest MessageDigest.getInstance("SHA-1");4 digest.update(decript.getBytes("UTF-8"));5 byte[] messageDigest dige…

VLAN设置错误,导致部分用户无法上网

一、事由&#xff1a; 单位的思科3560交换机安装到位&#xff0c;加班到夜里12点&#xff0c;测试了一下&#xff0c;怎么有些用户PING不到了呢&#xff1f;难道集体关机了吗&#xff1f;太累了&#xff0c;准备明天处理。二、问题&#xff1a; 第二天早上&#xff0…

JS通过正则限制 input 输入框只能输入整数、小数(金额或者现金)

第一&#xff1a; 限制只能是整数 [js] view plaincopy <input type "text" name "number" id number οnkeyup "if(! /^d$/.test(this.value)){alert(只能整数);this.value;}" /> 如果不是整数就直接alert 第二&#xff1a; 限制是两位…

npm包开发测试与发布

NPM 包开发测试与发布NPM 包开发测试与发布引言1. 开发步骤1.1. 项目创建1.2. 工具类功能实现1.3. ts文件编译2. npm包本地测试2.1. 将npm包文件引入项目2.2. npm包功能测试3. 发布4. 注意事项我的NPM包NPM 包开发测试与发布 引言 在项目开发过程中&#xff0c;有时会遇到在多…

Jquery php 点击td变成input,修改后失去焦点发送数据

html部分 <Td><?php echo $row[bigclassid]?></Td> <td height"25" width"241" class"bigclassname"><?php echo $row[bigclassname]?></a></td> Js部分 <script> /**//* * 说明&#xff1…

美元加息怎么“剪羊毛”

我国为什么把美元储备看的如此重要? 我国需要一定的美元储备&#xff0c;不敢把美元随便花出去!1998年亚洲金融危机&#xff0c;东南亚国家为什么抵抗不过对冲基金&#xff0c;就是因为他们手里的美元储备太少&#xff0c;如果你手里美元多&#xff0c;就可以放出美元&#xf…

浅谈企业IT应用的访问方式之:乱想

近来手上的几大块事情&#xff0c;算是大头朝下了。后面可能更多是跟公司的最终用户打交道&#xff0c;一套完整的应用服务体系&#xff0c;不光只是服务器平台的搭建。更重要的是如何让用户觉得确实给他们带来了帮助。 在非洲的一段经历让我们严重认识到一点&#xff0c;其…

java中的基本用法

java中的基本用法 关键字&#xff1a;专门用途的字符串 所有java关键字都是小写英文标识符 java常量 java变量 ■ 作用域&#xff1a;起作用的区域■ 使用前必须先声明&#xff0c;在赋值。使用变量名访问这块区域java程序执行过程 java变量的分类 ■ 局部变量■ 成员变量■…

JavaScript中双叹号(!!)和单叹号(!)

转自&#xff1a;JavaScript中双叹号(!!)作用 经常看到这样的例子&#xff1a; var a&#xff1b; var b!!a; a默认是undefined。!a是true&#xff0c;!!a则是false&#xff0c;所以b的值是false&#xff0c;而不再是undefined&#xff0c;也非其它值&#xff0c;主要是为后续判…

git 初次push

1、本地仓库与远程仓库第一次同步时&#xff0c;一直同步不上 最后 git status ,发现有两个文件没提交 提交后再push即可 2、如果不行&#xff0c;再看一下其他情况 转载于:https://www.cnblogs.com/sanhao/p/10681919.html

简单是可靠的先决条件

2010年4月编程语言排名&#xff0c;C语言重回第1宝座&#xff0c;不禁令人感叹C语言的生命力。 记得有人在几年前发表了一篇C语言已经死了&#xff0c;5个需要忘却它的理由&#xff0c;其后有人发表驳“C语言已经死了”&#xff0c;又有人发表也驳"驳C语言已经死了" …

帮朋友招聘赴北京微软ASP.NET开发工程师

职位要求&#xff1a;1. 3年以上ASP.NET开发经验。2. 有过大型门户网站开发经验。3. 精通ASP.NET WEB开发、Ajax技术&#xff0c;有良好的代码编写习惯。4. 能够熟练运用MVC框架。有意向的朋友可以将简历发到我邮箱&#xff1a;fanmenglifemicrosoftservices.com.cn转载于:http…