Rulegen插件的算法原理是什么?

根据什么写出来的? Rulegen插件的算法原理是什么?

算法原理

k近邻(k-Nearest Neighbor,kNN),应该是最简单的传统机器学习模型,给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的k个实例,这k个实例中的大多数属于哪个类别,就把该输入实例划分到这个类别。

k近邻算法没有显示的训练过程,在“训练阶段”仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后在进行计算处理。

这个k实际上是一个超参数,k值的选择会对k近邻法的结果产生重大影响。如果选择较小的k值,意味着只有与输入实例较近的(相似的)训练实例才会对预测结果起作用,预测结果会对近邻的实例点非常敏感,如果近邻的实例点恰巧是噪声点,预测就会出错;如果选择较大的k值,就意味着与输入实例较远的(不相似的)训练实例也会对预测起作用,这样预测也会出错。在实际应用中,k值一般取一个比较小的数值,并且通常采用交叉验证法来选取最优的k值。如上图的k=5。

模型训练代码地址:https://github.com/qianshuang/ml-exp

def train():

print("start training...")

# 处理训练数据

train_feature, train_target = process_file(train_dir, word_to_id, cat_to_id)

# 模型训练

model.fit(train_feature, train_target)

def test():

print("start testing...")

# 处理测试数据

test_feature, test_target = process_file(test_dir, word_to_id, cat_to_id)

# test_predict = model.predict(test_feature) # 返回预测类别

test_predict_proba = model.predict_proba(test_feature) # 返回属于各个类别的概率

test_predict = np.argmax(test_predict_proba, 1) # 返回概率最大的类别标签

# accuracy

true_false = (test_predict == test_target)

accuracy = np.count_nonzero(true_false) / float(len(test_target))

print()

print("accuracy is %f" % accuracy)

# precision recall f1-score

print()

print(metrics.classification_report(test_target, test_predict, target_names=categories))

# 混淆矩阵

print("Confusion Matrix...")

print(metrics.confusion_matrix(test_target, test_predict))

if not os.path.exists(vocab_dir):

# 构建词典表

build_vocab(train_dir, vocab_dir)

categories, cat_to_id = read_category()

words, word_to_id = read_vocab(vocab_dir)

# kNN

model = neighbors.KNeighborsClassifier()

train()

test()运行结果:

read_category...

read_vocab...

start training...

start testing...

accuracy is 0.820000

precision recall f1-score support

时政 0.65 0.85 0.74 94

财经 0.81 0.94 0.87 115

科技 0.96 0.97 0.96 94

游戏 0.99 0.74 0.85 104

娱乐 0.99 0.75 0.85 89

时尚 0.88 0.67 0.76 91

家居 0.44 0.78 0.56 89

房产 0.93 0.82 0.87 104

体育 1.00 0.98 0.99 116

教育 0.96 0.65 0.78 104

avg / total 0.87 0.82 0.83 1000

Confusion Matrix...

[[ 80 4 0 0 0 0 6 3 0 1]

[ 1 108 0 0 0 0 6 0 0 0]

[ 0 0 91 0 0 0 3 0 0 0]

[ 4 0 1 77 0 3 18 0 0 1]

[ 4 3 0 1 67 4 10 0 0 0]

[ 0 0 0 0 1 61 29 0 0 0]

[ 9 5 2 0 0 0 69 3 0 1]

[ 9 3 0 0 0 0 7 85 0 0]

[ 2 0 0 0 0 0 0 0 114 0]

[ 14 10 1 0 0 1 10 0 0 68]]

社群:

公众号:

了解更多干货文章,可以关注小程序八斗问答

---------------------

作者:gaoyan0335

来源:CSDN

原文:https://blog.csdn.net/gaoyan0335/article/details/86299367

版权声明:本文为博主原创文章,转载请附上博文链接!

LOL玩家用“Knn分类算法”预测ig和fpx的半决赛,怎么评价?

英雄联盟S9世界赛四强赛马上就要开打了,在此之前许多网友在论坛上发布了各式各样的预测。其中争议最大的还是IG和FPX的比赛结果,站IG和FPX的人数都差不多,对此有一位精通计算机的LOL玩家用”Knn分类算法”预测IG和FPX的半决赛,最后得出1个结论!

Rulegen插件的算法原理是什么?

笔者先给大家科普一下这个算法吧,Knn算法又被叫做K邻近分类算法,简单可以用一句话来概括“物以类聚,人以群分”。然后,我们再来看这名玩家是怎么预测FPX和IG比赛结果的。

首先手动输入IG最近五场比赛的大部分数据:KDA、场/分均伤害、场/分均经济、场、分均补刀、场/分均承伤、排眼和插眼。另外,考虑到IG最近5场比赛胜多输少会影响数据客观性,还增加了一场IG输DWG的一场比赛来平衡样本。

Rulegen插件的算法原理是什么?

然后将所有的样本作为feature(特征)做了一个Knn算法,采用双方数据的平均值作为样本,预测了比赛时长在14-40分钟这个区间的结果。

接着在FPX的模型里将IG作为对手运行一遍算法,记录下FPX在五场比赛中的胜负;再在IG的模型里以IG为对手运行一次算法,同样对IG的五场比赛的结果做记录。

Rulegen插件的算法原理是什么?

最终得出的结果是:在FPX的模型里将IG作为对手,IG五场全胜;在IG的模型里将FPX作为对手,FPX五场全胜,简单粗暴的理解就是“在我的领域里没有人能打败我”。因此,这名玩家得出了一个结论:看比赛临场发挥,谁发挥得好谁就能赢!(这……?)

虽然这名玩家最终得出的结论乏善可陈,但是他这波预测很硬核啊,尤其是手动输入全部数据可以说相当用心了。不过,数据终归是数据,它只能代表一支战队在过去一段时间的表现,并不能准确预测将来比赛的结果,下面笔者再从比赛的表现来预测一波FPX和IG的比赛。

上路Gimgoon对Theshy

Rulegen插件的算法原理是什么?

客观的说贡哥子现在是FPX现在最薄弱的一个点,贡子哥的状态从小组赛到淘汰呈下滑趋势,虽然在团战中的表现还是可圈可点的,但是辣眼睛的操作数不胜数;而theshy的状态则是处于一个相当火热的状态,他依旧是IG最粗的一条大腿(另一条是rookie)。

中单Doinb对Rookie

Rulegen插件的算法原理是什么?

Inb哥的表现则是呈明显的上升趋势,淘汰赛的天使和瑞兹都相当carry,并且他和小天依然承担着FPX前期的全部节奏;Rookie的表现也不慌多让,线上打开优势就把优势扩散到边路,没打开就去帮上滚雪球。

打野Tian和Ning

Rulegen插件的算法原理是什么?

小天在世界赛的表现可以用一个词来形容——少年老成,完全不像一个初次参加世界赛的新人,FPX能走到现在小天功不可没;Ning的表现则是慢慢回暖状态,他本来就是个敢操作的人,在熟悉节奏之后还是带动全局的。

下路Lwx+Crisp对Jackylove+baolan

FPX下路表现好的是刘青松LWX则更偏团战,比起小组赛的表现,FPX下路进步很大;IG下路jkl最近打得有点上头,但是该打的输出也同样没少,baolan也越来越稳定了。

总的来说,FPX对战IG:上路三七开,中路五五开,打野六四开,下路五五开,IG小优。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 xxx@163.com 举报,一经查实,本站将立刻删除。

发表评论

登录后才能评论