首页 文章 精选 留言 我的

精选列表

搜索[预测分析],共10007篇文章
优秀的个人博客,低调大师

开源先驱预测 Windows 将改用 Linux 内核

近日,开源先驱、《大教堂与集市》作者 Eric S Raymond 在个人博客上提出了一个惊人的观点,他认为 Linux 即将取得操作系统之争的最后胜利,因为微软很有可能在未来放弃 Windows 系统的内核研发,转而将其建立在 Linux 内核之上。 微软对 Linux 的支持 Raymond 的这一观点很大程度上来源于微软近年来对 Windows Subsyste for Linux (WSL)的大力推动。 在 2015 年的一次活动中,微软新任 CEO 说出了那句“Microsoft Loves Linux!”,正式宣布开源界曾经的最大敌人正式拥抱这个开源世界最大的操作系统 —— Linux。 虽然微软在云计算领域很早之前就将 Azure 支持多个流行的 Linux 发行版,但对于普通消费者而言,真正的变化发生在后面的 Windows 10 —— 微软宣布将会在 Windows 10 内置 Linux,而采用的技术并非是所谓的「虚拟化」技术 —— 也就是说,这个子系统的 Linux 完全是原生运行在 Windows 10 上的。而微软给这个 Linux 系统命名为:Windows Subsystem for Linux,即 WSL 。 虽然微软面对开源世界展现出了前所未有的诚意, 但当时的一些开源大佬仍然不看好 WSL 的前景,认为这只是微软的又一步商业战略,RMS 甚至直言 WSL 会阻碍自由软件的发展。 然而随着微软对 WSL 的支持日渐深入,越来越多的开源大佬开始对微软另眼相看。Raymond 认为,微软近年来对 WSL 的推动值得尊敬,该技术可以使 Linux 二进制文件在 Windows 下运行,因此微软在改进 WSL 的过程中也为 Linux 内核做出了诸多贡献。与此同时,他推断微软之所以不惜花费大量的人力财力来发展 WSL,很有可能是因为其商业核心已经从 Windows 上转移至其他市场。 微软商业核心转移 事实上,自微软 2010 年推出云服务以来,微软的收入流就发生了巨大的变化。根据微软在 2019 年公布的财报显示,在过去 5 年,微软的云计算业务 Azure 是其收入增长最快的业务,而 Windows 的增长速度已经落到了第四位。 与高速增长的云服务市场相比,微软的 Windows 业务在家用 PC 市场虽然统治已久,但全球的存量市场销量正在下​​降。因此,Raymond 认为微软对 Windows 开发支出的投资回报率正在下降。随着全球 PC 销量的持续下滑,Windows 将不再是微软的利润增长中心,甚至还会拖累其他业务。 “从利润最大化的角度来看,这意味着继续进行 Windows 开发可能是微软不想做的事情。取而代之的是,他们最好将更多的资金投入到 Azure 中。据传,Azure 目前运行的Linux 实例多于 Windows。” Raymond 在博客中说。 当然,即便是增速放缓,Windows 目前仍然是微软不可撼动的四大摇钱树之一。 因此,微软短期内要把 Windows 业务完全砍掉是不可能的,而 Raymond 认为,微软很有可能在未来会进一步减少在 Windows 上的研发投入,采用另一种模式来发展 Windows 。 内核上的虚拟层 Raymond 把一款自己正在使用的游戏工具 Proton 与 Windows 未来的发展方向进行了类比。Proton 是游戏发行平台 Steam 针对 Linux 用户推出的 Wine 复刻版本,用户可以使用 Proton 在 Linux 系统上通过 Steam 运行更多的 Windows 游戏。 Proton 是操作系统内核之上的一个虚拟层,能够让 Steam 上发行的 Windows 游戏在 Linux 系统上运行。“虽然它还不是完美的,但是已经接近了,我自己就用它来玩《战舰世界》。” Raymond 介绍说。 Raymond 认为,对于一个 Windows 虚拟层来说,在上面跑一款大型的游戏无疑是最苛刻的压力测试,其对机器资源的消耗远远超过普通商业软件。而类似 Proton 这样的技术已经完全可以在 Linux 上运行 Windows 大型游戏了,那么对于 Windows 的其他商业软件来说,这样的虚拟层技术可以说是绰绰有余。 操作系统之争大结局? 最后,Raymond 以一个只寻求利润的微软战略家角度,得出了如下结论: “微软的 Windows很有可能变成建立在 Linux 内核之上的虚拟层,类似于 Proton 。而随着微软对 Linux 内核的支持越来越多,Windows 虚拟层也将变得越来越轻薄。这意味着他们不再需要深入开发自己的内核,从而减少了大量的开发成本。 如果您认为这只是胡扯,那么请再仔细想想微软近年来为Linux 所做的一切。其中最好的证据是微软已经计划将 Edge 移植到 Linux 下运行,显然这是微软向原生 Linux 内核迈进的一次试验,以使 Windows 其他的程序套件在未来可以直接跑在原生 Linux 中,不再依赖于任何虚拟层。” Raymond 认为,随着时间的流逝,Windows 将仅用于处理“游戏和其他旧版第三方软件”,其内核很有可能会建立在 Linux 内核上。至此 Linux 将实现操作系统内核大一统。而最终,微软则会将更多的精力专注于 Azure,从而逐渐失去在 Windows 上投资的兴趣,最后甚至将完全放弃Windows 。 “第三方软件提供商将停止使用纯 Linux API 来支持 Windows 二进制文件的发行……Linux 最终赢得了桌面之战,不是通过取代 Windows ,而是通过选择 Windows 来赢得这场战争。” 当然,这一切只是 Raymond 的个人见解。对此你有什么看法呢? 参考链接: http://esr.ibiblio.org/?p=8764 https://www.theregister.com/2020/09/28/eric_raymond_linux_beats_windows_prediction/ https://github.com/ValveSoftware/Proton

优秀的个人博客,低调大师

KTV歌曲推荐-逻辑回归-用户性别预测

前言 上一篇写了推荐系统最古老的的一种算法叫协同过滤,古老并不是不好用,其实还是很好用的一种算法,随着时代的进步,出现了神经网络和因子分解等更优秀的算法解决不同的问题。 这里主要说一下逻辑回归,逻辑回归主要用于打分的预估。我这里没有打分的数据所以用性别代替。 这里的例子就是用歌曲列表预判用户性别。 什么是逻辑回归 逻辑回归的资料比较多,我比较推荐大家看刷一下bilibili上李宏毅老师的视频,这里我只说一些需要注意的点。 网络结构 逻辑回归可以理解为一种单层神经网络,网络结构如图: 激活函数选择 逻辑回归一般选sigmoid或者softmax 图的上半部分就是二元逻辑回归激活函数是sigmoid 图的下半部分是多元逻辑回归没有激活函数直接接了一个softmax 别问我啥是sigmoid啥是softmax,问就是百度。 损失函数选择 损失函数逻辑回归常用的有三种(其实有很多不止三种,自己查API喽): binary_crossentropy categorical_crossentropy sparse_categorical_crossentrop 这里其实用binary更合适,但是我这里选的categorical_crossentropy,因为我懒得改了,而且我后面会做其他功能 梯度下降选择 梯度下降方式有很多,我这里选择随机梯度下降,sgd其实我觉得adam更合适,看大家心情了。至于为啥 数据准备 这次的数据是1万条KTV唱歌数据,别问我数据哪来的。问就是别人给的。 X是用户唱歌数据的one-hot Y是用户的性别one-hot 下面是真正的技术 代码实现 数据拆分为 80%训练 20%测试 这里虽然只有两类但是还是用了softmax,不影响 训练工具是keras 数据获取 下面代码都干了些啥呢,主要是两个matrix。 一个是用户唱歌的onehot->song_hot_matrix。 一个是用户性别的onehot->decades_hot_matrix。 代码不重要,主要看字。 import elasticsearch import elasticsearch.helpers import re import numpy as np import operator import datetime es_client = elasticsearch.Elasticsearch(hosts=["localhost:9200"]) def trim_song_name(song_name): """ 处理歌名,过滤掉无用内容和空白 """ song_name = song_name.strip() song_name = re.sub("【.*?】", "", song_name) song_name = re.sub("(.*?)", "", song_name) return song_name def trim_address_name(address_name): """ 处理地址 """ return str(address_name).strip() def get_data(size=0): """ 获取uid=>作品名list的字典 """ cur_size=0 song_dic = {} user_address_dic = {} user_decades_dic = {} search_result = elasticsearch.helpers.scan( es_client, index="ktv_user_info", doc_type="ktv_works", scroll="10m", query={ "query":{ "range": { "birthday": { "gt": 63072662400 } } } } ) for hit_item in search_result: cur_size += 1 if size>0 and cur_size>size: break user_info = hit_item["_source"] item = get_work_info(hit_item["_id"]) if item is None: continue work_list = item['item_list'] if len(work_list)<2: continue if user_info['gender']==0: continue if user_info['gender']==1: user_info['gender']="男" if user_info['gender']==2: user_info['gender']="女" song_dic[item['uid']] = [trim_song_name(item['songname']) for item in work_list] user_decades_dic[item['uid']] = user_info['gender'] user_address_dic[item['uid']] = trim_address_name(user_info['address']) return (song_dic, user_address_dic, user_decades_dic) def get_user_info(uid): """ 获取用户信息 """ ret = es_client.get( index="ktv_user_info", doc_type="ktv_works", id=uid ) return ret['_source'] def get_work_info(uid): """ 获取用户信息 """ try: ret = es_client.get( index="ktv_works", doc_type="ktv_works", id=uid ) return ret['_source'] except Exception as ex: return None def get_uniq_song_sort_list(song_dict): """ 合并重复歌曲并按歌曲名排序 """ return sorted(list(set(np.concatenate(list(song_dict.values())).tolist()))) from sklearn import preprocessing %run label_encoder.ipynb user_count = 4000 song_count = 0 # 获得用户唱歌数据 song_dict, user_address_dict, user_decades_dict = get_data(user_count) # 歌曲字典 song_label_encoder = LabelEncoder() song_label_encoder.fit_dict(song_dict, "", True) song_hot_matrix = song_label_encoder.encode_hot_dict(song_dict, True) user_decades_encoder = LabelEncoder() user_decades_encoder.fit_dict(user_decades_dict) decades_hot_matrix = user_decades_encoder.encode_hot_dict(user_decades_dict, False) song_hot_matrix uid 洗刷刷 麻雀 你的答案 0 0 1 0 1 1 1 0 2 1 0 0 3 0 0 0 decades_hot_matrix uid 男 女 0 1 0 1 0 1 2 1 0 3 0 1 模型训练 import numpy as np from keras.models import Sequential from keras.layers import Dense, Activation, Embedding,Flatten import matplotlib.pyplot as plt from keras.utils import np_utils from sklearn import datasets from sklearn.model_selection import train_test_split n_class=user_decades_encoder.get_class_count() song_count=song_label_encoder.get_class_count() print(n_class) print(song_count) # 拆分训练数据和测试数据 train_X,test_X, train_y, test_y = train_test_split(song_hot_matrix, decades_hot_matrix, test_size = 0.2, random_state = 0) train_count = np.shape(train_X)[0] # 构建神经网络模型 model = Sequential() model.add(Dense(input_dim=8, units=n_class)) model.add(Activation('softmax')) # 选定loss函数和优化器 model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy']) # 训练过程 print('Training -----------') for step in range(train_count): scores = model.train_on_batch(train_X, train_y) if step % 50 == 0: print("训练样本 %d 个, 损失: %f, 准确率: %f" % (step, scores[0], scores[1]*100)) print('finish!') 准确率测试集评估 数据训练完了用拆分出来的20%数据测试一下: # 准确率评估 from sklearn.metrics import classification_report scores = model.evaluate(test_X, test_y, verbose=0) print("%s: %.2f%%" % (model.metrics_names[1], scores[1]*100)) Y_test = np.argmax(test_y, axis=1) y_pred = model.predict_classes(test_X) print(classification_report(Y_test, y_pred)) 输出: accuracy: 78.43% precision recall f1-score support 0 0.72 0.90 0.80 220 1 0.88 0.68 0.77 239 accuracy 0.78 459 macro avg 0.80 0.79 0.78 459 weighted avg 0.80 0.78 0.78 459 人工测试 然后让小伙伴们一起来玩耍,嗯准确率100%,完美! def pred(song_list=[]): blong_hot_matrix = song_label_encoder.encode_hot_dict({"bblong":song_list}, True) y_pred = model.predict_classes(blong_hot_matrix) return user_decades_encoder.decode_list(y_pred) # # 男A # print(pred(["一路向北", "暗香", "菊花台"])) # # 男B # print(pred(["不要说话", "平凡之路", "李白"])) # # 女A # print(pred(["知足", "被风吹过的夏天", "龙卷风"])) # # 男C # print(pred(["情人","再见","无赖","离人","你的样子"])) # # 男D # print(pred(["小情歌","我好想你","无与伦比的美丽"])) # # 男E # print(pred(["忐忑","最炫民族风","小苹果"]))

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册