hadoop生态,最底层为HDFS, 分布式文件系统
在往上,为Hbase,分布式数据库
再上层,就是mapreduce计算框架,storm(流式计算),spark
再上层,hive(sql引擎),mahout,webserver
贯穿在整个集群中的,是分布式锁服务zookeeper。
如图:
以前:人与内容 现在:人与服务
音乐数据来自两类:pgc,ugc
物品(item):属性(features),一般被称为元数据(metadata)。
item- 物品
user- 用户(行为:点击,展现,收藏,支付。。。)
简单的推荐引擎架构
用户点击itemA(港台十大经典歌曲《朋友》)后,系统将item交给引擎处理,引擎会从后端的nosql数据库中查出与itemA相关性较高的item推荐给用户。
item指向token的表是正排表:
token指向item的表是倒排表。
见下图
对于如下数据集(feature为grade, bumpyness,speed limit, label为speed)
grade | bumpiness | speed limit? | speed |
---|---|---|---|
steep | bumpy | yes | slow |
steep | smooth | yes | slow |
flat | bumpy | no | fast |
steep | smooth | no | fast |
p(slow) = 2/4= 0.5
p(fast) = 2/4= 0.5
该节点的entropy为
entropy(node) = -p(slow)*log(p(slow)) - p(fast)*log(p(fast))
= -0.5* log(0.5) - 0.5 * log(0.5)
= 1.0
学习器在训练集上的误差称为“训练误差”, 在新样本上的误差被称为“泛化误差”
我们希望在新样本上表现得很好的学习器。
导致过拟合最常见的情况是由于学习能力过于强大,以至于把训练样本中所包含的不太一般的特性都学到了。
欠拟合则多数是由于学习能力低下造成的。
欠拟合:一般增加训练数据或训练轮数等
过拟合则比较难规避。过拟合是无法彻底避免的,我们只能缓解或减小其风险。
“留出法”直接将数据集D划分为两个互斥的集合。其中一个作为训练集,另一个作为测试集。
训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响
cross validation: 先将数据集划分为k个大小相似的互斥集合,每次用k-1个子集作为训练集,余下的那个子集作为测试集;这样就获得了k组测试/训练集,从而可以进行k次训练和测试,最终返回k个测试结果的均值。通常称为 k折交叉验证
。
为减少因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次。最终的评估结果是这p次k折交叉验证结果的均值。
机器学习常涉及两类参数:
错误率是分类错误的样本数占样本总数的比例
精度则是分类正确的样本数占样本总数的比例
定义
对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive), 假正例(false positive),真反例(true negative),假反例(false negative)四种情形。TP+FP+TN+FN=样例总数。
分类结果的“混淆矩阵”如下表
准确率: P = TP / (TP+FP)
召回率: R = TP / (TP+FN)
准确率与召回率是一对矛盾的度量。我们经常使用F1 来度量
F1 = 2 * P * R / (P + R)
ROC全称是“受试者工作特征”曲线。
TPR = TP / (TP + FN)
FPR = FP / (TN + FP)
进行学习器比较时,若一个学习器的ROC曲线被另一个学习器的曲线完全包住,则可断言后者性能优于前者;若两个学习器的ROC曲线发生交叉,则需要比较ROC曲线下的面积,即 AUC (Area Under ROC Curve)
AUC可通过对ROC曲线下各部分的面积求和而得。
现实任务中不同错误所造成的损失是不同的。比如:医疗诊断时,有可能将健康人诊断为病人,即FN, 也可能将病人诊断为健康人,即FP; 两者都是犯了错误,但错误的影响时不一样的。前者只是需要进一步检查,后者可能就会丧失治疗的最佳时机。
为权衡不同类型错误所造成的不同损失,可将错误赋予“非均等代价(unequal cost)”
二分类代价矩阵
上图中,cost(ij) 指的是第i类被预测为第j类样本的代价。
决策树是一种十分常见的分类方法,是一种监督学习。
监督学习:take examples of inputs and outputs to learn and train an algorithm, then give a new input, use this algorithm to predict an output.
监督学习可以分为classification与regression。classification与regression的分类与input无关,与output有关
classfiction 与 regression的比较见如下表格:
Input | Output | classificaction or Regression |
---|---|---|
Credit history | lend money or not | classification |
a picture of person | high school, college or graduate | classification |
a picture of person | age(float) | Regression |
training set和test set不能一样
20 questions
是一个游戏,一个人脑海中想象一个事物,另一个人通过20个是非问题来确定这个事物是什么。
Loop
中文解释:
information gain:通过挑选特定属性获取信息量的数学方法。
entropy: 测量随机性的一种方法。
执行MapReduce任务时,出现如下报错:
[root@master mapreduce_wordcount_python]# bash run.sh
rmr: DEPRECATED: Please use 'rm -r' instead.
rmr: `/output': No such file or directory
19/02/15 14:50:20 WARN streaming.StreamJob: -file option is deprecated, please use generic option -files instead.
packageJobJar: [./map_new.py, ./red_new.py, /tmp/hadoop-unjar1610102638531802348/] [] /tmp/streamjob2624593896310271836.jar tmpDir=null
19/02/15 14:50:21 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.211.10:8032
19/02/15 14:50:21 INFO client.RMProxy: Connecting to ResourceManager at master/192.168.211.10:8032
19/02/15 14:50:22 INFO mapred.FileInputFormat: Total input paths to process : 1
19/02/15 14:50:22 INFO mapreduce.JobSubmitter: number of splits:2
19/02/15 14:50:22 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1550239813206_0002
19/02/15 14:50:23 INFO impl.YarnClientImpl: Submitted application application_1550239813206_0002
19/02/15 14:50:23 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1550239813206_0002/
19/02/15 14:50:23 INFO mapreduce.Job: Running job: job_1550239813206_0002
19/02/15 14:50:24 INFO mapreduce.Job: Job job_1550239813206_0002 running in uber mode : false
19/02/15 14:50:24 INFO mapreduce.Job: map 0% reduce 0%
19/02/15 14:50:24 INFO mapreduce.Job: Job job_1550239813206_0002 failed with state FAILED due to: Application application_1550239813206_0002 failed 2 times due to Error launching appattempt_1550239813206_0002_000002. Got exception: org.apache.hadoop.yarn.exceptions.YarnException: Unauthorized request to start container.
This token is expired. current time is 1550242223020 found 1550214024349
Note: System times on machines may be out of sync. Check system time and time zones.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.instantiateException(SerializedExceptionPBImpl.java:168)
at org.apache.hadoop.yarn.api.records.impl.pb.SerializedExceptionPBImpl.deSerialize(SerializedExceptionPBImpl.java:106)
at org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher.launch(AMLauncher.java:123)
at org.apache.hadoop.yarn.server.resourcemanager.amlauncher.AMLauncher.run(AMLauncher.java:251)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
. Failing the application.
19/02/15 14:50:24 INFO mapreduce.Job: Counters: 0
19/02/15 14:50:24 ERROR streaming.StreamJob: Job not successful!
Streaming Command Failed!
在网上查了下报错,见链接
问题原因为:
This exception occurs when your nodes have different time settings. Make sure that your all 3 nodes have same time n timezone settings and then restart computer.
我检查了我的集群,确实发现集群各节点时间不对。
修改好时间,并做好ntpdate同步后,我未重启集群 ,直接重新执行,任务正常