麻将麻将净化器灯

时间:2024-10-26 14:42 人气:0 编辑:招聘街

一、麻将麻将净化器灯

麻将是一种古老且非常受欢迎的亚洲桌面游戏。然而,尽管许多人热衷于这种游戏,却很少有人注意到麻将桌面的卫生问题。麻将桌面可能会聚集各种细菌,灰尘和其他污垢,这可能会对健康造成一定的威胁。为了解决这个问题,麻将麻将净化器灯应运而生。

什么是麻将麻将净化器灯?

麻将麻将净化器灯是一种设计用于清洁麻将桌面的创新产品。它结合了紫外线杀菌和灯光照明功能,有效地消除麻将桌面上存在的细菌和污垢。

麻将麻将净化器灯的工作原理

麻将麻将净化器灯通过紫外线杀菌技术消灭麻将桌面上的细菌。紫外线除菌技术是一种常用的卫生消毒技术,它能够迅速有效地杀死各种病毒、细菌和真菌。当麻将麻将净化器灯打开时,紫外线会通过高效的灯泡散发出来,直接照射在麻将桌面上,从而杀死细菌和其他病原体。

除了杀菌作用,麻将麻将净化器灯还具有照明功能。它的灯光明亮且柔和,可以有效地照亮整个麻将桌面,让玩家更清楚地看到麻将牌。这样一来,不仅可以保证游戏的流畅进行,还能增加游戏的享受度。

麻将麻将净化器灯的优势

相对于传统的麻将桌面清洁方法,麻将麻将净化器灯具有许多明显的优势。

  • 高效杀菌:麻将麻将净化器灯利用紫外线杀菌技术,可以高效地杀死细菌和其他病原体,保持麻将桌面的清洁。
  • 节省时间:使用麻将麻将净化器灯可以省去手动清洁麻将桌面的麻烦,节省大量时间和精力。
  • 方便携带:麻将麻将净化器灯体积小巧,便于携带。无论是在家中还是在外出旅游时,都可以随时使用。
  • 环保健康:麻将麻将净化器灯采用紫外线杀菌技术,无需使用化学清洁剂,对环境和健康更加友好。
  • 多功能:除了杀菌功能,麻将麻将净化器灯还具备照明功能,能够提供明亮舒适的灯光。

综上所述,麻将麻将净化器灯是一种非常实用和便捷的产品。它不仅可以保持麻将桌面的卫生,还能提供明亮的灯光,提升游戏体验。对于热爱麻将的玩家来说,麻将麻将净化器灯绝对是一个不可或缺的装备。

二、麻将攻略-如何成为麻将高手

掌握麻将基本规则

要想成为一名优秀的麻将高手,首先要熟悉和掌握麻将的基本规则。麻将是一种来自中国的传统桌上游戏,游戏中有“万”、“筒”、“条”三种牌,每种牌数目为1-9,共计108张牌。

了解各种胡牌方式

在游戏中,胡牌是最终的目标,而胡牌的方式有很多种,如:平胡、碰碰胡、混一色、清一色、七对等。不同的玩法对应着不同的胡牌方式,了解这些方式对于制定最佳的打牌策略至关重要。

学会观察牌局走势

除了熟悉规则和胡牌方式,一名优秀的麻将高手还需要善于观察牌局走势,包括剩余牌的情况、其他玩家的出牌习惯、自己手中牌的潜在组合等。这有助于制定后续出牌和听牌的策略。

善用技巧和策略

在实际游戏中,技巧和策略同样不可或缺。例如,要善于利用手中的牌来阻止对手胡牌,同时避免成为其他玩家的牌池;同时,要学会选择什么样的牌组合进行暗杠、明杠或者碰牌,这些都需要技巧和策略。

不断练习和总结经验

最后,成为一名麻将高手需要不断的练习和总结经验。只有通过实战,才能更好地理解各种技巧和策略在实际游戏中的应用,通过总结经验找出更适合自己的打牌方式。

感谢您阅读本文,相信通过这篇文章的分享,您可以更好地掌握麻将的玩法和技巧,成为一名真正的麻将高手。

三、打麻将必备——麻将专用吊灯

打麻将用的吊灯简介

麻将作为一种受欢迎的社交娱乐活动,一直以来都备受人们的喜爱。无论是家庭聚会还是朋友聚会,打麻将已经成为一种常见的娱乐方式。而为了提供更好的打麻将环境,专门设计的麻将专用吊灯应运而生。

打麻将用的吊灯的功能与特点

麻将专用吊灯是一种特殊的吊灯,其设计目的是为了满足打麻将时的光照要求,并提供舒适的视觉体验。以下是麻将专用吊灯的功能与特点:

  • 合适的亮度:麻将专用吊灯会提供适当的亮度,以确保玩家能够清晰地看到麻将牌的细节,同时又不会造成眩光。
  • 均匀的照明:麻将专用吊灯会提供均匀的照明,避免出现阴影和局部亮度不足的情况,确保玩家在任何位置都能够看清自己的牌。
  • 符合人体工学:麻将专用吊灯的设计考虑了人体工学原理,保证照明不会对玩家的眼睛造成疲劳或不适。
  • 简洁实用的外观:麻将专用吊灯通常采用简洁实用的外观设计,以适应不同风格的麻将桌,并能够融入不同的室内装饰。

选择适合的打麻将用的吊灯

选择适合的打麻将用的吊灯,可以提升整体的打麻将体验。以下是一些选择打麻将用的吊灯的注意事项:

  • 亮度调节:选择一个具备亮度调节功能的吊灯,这样可以根据实际需要自由调节光线。
  • 适当尺寸:根据麻将桌的大小选择合适尺寸的吊灯,确保照明范围适中,不会因过大或过小而影响整体效果。
  • 质量与安全:选择有良好声誉的品牌,确保吊灯的质量和安全性。
  • 风格与装饰:根据室内装饰风格选择符合的吊灯,既能满足麻将用途,又能与整个房间相协调。

结语

打麻将用的吊灯不仅提供合适的照明,还能带来更好的视觉体验,提升打麻将的乐趣。选择适合的吊灯能够让打麻将的场景更加舒适和温馨。希望通过本文的介绍,能够帮助读者更好地了解打麻将用的吊灯的功能与���点,并为选择适合的吊灯提供了一些参考意见。

感谢您阅读本文,希望本文能对您选择打麻将用的吊灯提供帮助!

四、如何提高麻将水平?

很多牌友是不是有这种感觉,初学麻将的时候,赢多输少,我们方言叫“黄棒手硬”,谦虚地对别人说是手气好;麻将打的次数越多,越认为自己是高手,技术好的时候,反而输多赢少,大起大落,自我安慰说是手气霉。这就跟武林高手修炼武功秘籍,结丹期要冲元婴期一样,遇到瓶颈了。

黄棒手硬

我们未突破一个瓶颈之前,打麻将更多靠的是经验的积累,技巧的总结,察言观色的本领。什么幺鸡二条不打要遭;什么对杵不如卡张;什么紧跟上家,紧盯下家,洗白三家的段子,这些都是看起来有一定道理的无稽之谈。

麻将牌是什么?是数字。怎么胡牌,靠排列组合。说白了,麻将就是一个制定了规则的数字游戏。既然是数字游戏,就归于数学的范畴,其背后都是有规律可循,有理论支撑的。

麻将要赢牌,是数学(概率)+运气的组合。运气作为一个唯心学变量,我们不能控制,那我们就控制唯物学的定量(概率)。

跟着科学走

第一、基础理论

我先举一个简单的例子。

理论情况下(不考虑牌池),这一手牌,应该开哪一张是最优解?在看我的分析前,请大家自己思考一下。

开1万,可以进38万,36筒下叫,理论上就有4x4-3(自己手里的)=13张;

开379万,同上,都是13张;

开3筒,可以进123789万,理论上就有6x4-4=20张;

开6筒,同上,20张。

我们运营一手牌的目的是啥?胡牌。胡牌的前提是什么?下叫。

下叫是我们胡牌的前提,下叫越早,胡牌的机会越大。能摸一手牌下叫,绝不摸二手。

这就引出我后面要讲的数学理论之机会数,也是贯穿我以后所有课程的核心,也就是我要帮助你突破瓶颈,去重新认识麻将的”秘籍“。

第二、技术(换牌、定张、开牌、碰牌、杠牌、记牌、贪牌等)

因笔者是玩四川/成都麻将血战到底换三张的,我的技术积累都将以此玩法展开。

1、换三张之换牌

开局的时候换三张,是一个打乱手牌的过程;这是一个需要引起高度重视的步奏,换好换差,极其会影响后续牌局发展。

(1)换一次成副(坎)机会数小的出去,留下一次成副(坎)机会数大的。

167条,进58条,一次成副机会数为8;

135万,进24万,一次成副机会数为8;

138万,进2万,一次成副机会数为4;

358万,进4万,一次成副机会数为4;

158万,一次成副机会数为0;

按分析,留下167条,135万,都是可以的;但是,如果我们换167条出去,就有可能把别人换好。所以我推荐换158万出去。

实战中,我换了158万出去,拿回来的牌如上

(2)拿到牌后,观察自己的牌型,心中计划本局做什么牌,留下的牌要对本局牌型或优势牌有帮助(优势牌对子多,就留下对子,做大做强;优势牌牌顺,就留下自己比较顺的牌,做自摸牌)

一拿到牌,我就知道这局就是小胡跑路或者贪自摸,没有做大的可能。万子已成2副,就是我的优势牌,只能换筒子出去。那么换155,177,还是157呢?我在实战中换的155出去。万子已成2副,还缺少将牌,留下一对7筒,那么不论拿到条子或者筒子,我都能打。而且,7筒属于桥梁牌,连接作用大,我就算拿不到筒子,把7筒打出去,也能让别人难受。大家实战中很多时候是不是觉得3和7让自己很难受。换157出去,虽然破坏了2对,但是没有给自己留底子。换1对5筒出去,怕不怕别人起手暗杠?有这个风险,但是这种风险很小,还是让自己的底牌顺,优势大更好。

这是换回来的牌,很快就跑路了

换牌还有很多技巧和方法,以后我会详细给大家介绍,并且分析原理。

2、换三张之定张

(1)原则上,定打最少的一门。

根据概率统计,牌墙中的牌是随机均匀分布的,特别是现在是机器麻将洗牌,更是减少了人为因素导致的同色牌扎堆。某种花色,你拿得多,别人就拿得少;反之,你拿的少,别人就拿得多。而且在经过换三张之后,要么天缺一门,要么自己还剩下1-2张,这种更应该是打最少的,缺一门更快,下叫更快。如果你偏要违背这个规律,打多留少,极易会造成某个人”睡宽床“,做清一色。

(2)”撞车牌“的定张处理

大多数情况下,我们扣出去的都是3-4张牌的一门,如果撞车了,就把这一门留着,防止拿到我们牌的人做大牌或者快速下叫。

对家撞车:这就要观察对家的打牌习惯,如果对家撞车了,习惯性把3张牌往旁边靠,并且从这三张里面定一张,那我们大概率要收这一门,防止上家和下家换好了,出现别人睡宽床的局面。对家如果往牌墙里面另外抽一张,他收了,我们就不收。尽量避免两家不收或者两家都收了的情况,免得成全了上下两家。

换上家和下家撞车,除非自己另外两门牌都很好,很顺,否则那就一定要防守,收牌。

定牌还有很多技巧和方法,以后我会详细给大家介绍,并且分析原理。

3、换三张之开牌

定张后,如果手里有2张以上的牌,需要开,怎么开?

(1)有37先开37,其次开456,再开28,再开19。

3和7是桥梁,直接连接1245和5689,重要性最大,早点把37开了,能够减少别人成副的自由度。

(2)”紧跟上家“;意思是别人打6万,你跟着把6万打了;防止别人贪6万,你跟着打,别人就不能胡,并且可以造成断张的一种状态,逼迫别人去开不能和6万连接的牌。

(3)跟着开可能胡牌的张;别人开6万,你跟着打3万或9万,道理同上。

(4)需要开牌的数量少,则先开生张,再开熟张;防止别人摸到一对后碰牌,碰牌属于进攻打法,这样开牌可以延缓对手的做牌大小

(5)撞车后牌多或有人做清一色或有人睡宽床,先开熟张,防止别人生张碰牌多,迅速做成清一色。这时候不要点别人杠,因为先把熟张开了,把牌打断了,别人做清一色的速度会减慢,就算下叫了,能胡的张数也少,杠上花的机率还是很小的。

碰牌,杠牌,记牌,贪牌等打法实战技术,我会在以后的课程系统性给大家讲解,并且使用我们学习的理论知识来分析解读。

第三、博弈-麻将中的经济学

1、番种的收益

我们把小胡按1分作为基本分,梳理一下我们常规番种的收益。

小胡=1分

对子胡=2分

清一色=4分

七对=4分

金钩吊=4分

自摸=(1+1)x3=6分,收益率600%(自摸加底)

清对子胡=8分

龙七对=8分

点杠杠上花=5x3+2=17分,收益率1700%(自摸加底)

暗杠杠上花=7x3=21,收益率2100%(自摸加底)

大家看出什么来了吗?也许你辛辛苦苦做一个清一色,还抵不上一个自摸的收益高。

那种在实战中,除非运气特别好,很容易就做了一个清一色大牌关三家,但是这种机会是少之又少的,当然如果有这种机会,我们就必须要抓住机会,搏一搏,单车变摩托。

从经济学的观点来说,自摸和杠上花的投资收益最高,投资价值最大。所以在麻将博弈过程中,要把胡牌的中心向自摸或杠上花倾斜。特别是自摸,实战中出现的频率比清一色,杠上花高得多,既实际又实惠,带勾自摸也很容打出,收益率900%。

所以在做牌过程中,要审时度势,往收益率最高的牌去做。

第四、运气

运气这个东西,属于玄学,运气好的时候,挡都挡不住,运气霉的时候,霉伤心。

运气,是运势和气势组成的,运势,那就大家出门打牌时候看黄历

气势,在牌桌上是可以转变的

大家有时候发现没有,当打出一把大牌时候,无论是牌势或者自信,都上来了,连着可能来几把好牌或者连续胡牌正收益。

当有一把大牌,因为贪牌,从而没胡到,还放了巨炮,而导致从巨大的正收益变为负收益,并且后续一蹶不振,所谓一贪霉。

或者你手气很好,遭到别人针对,该你摸牌的时候,别人老是打出生张给别人碰,来射飞你的牌,从而导致后续手气不好。

这都是我们的气势受到了打击和影响。

这就要说到,我们在牌桌上如何利用手里的牌来转变气势。

自己手气好,就要抓住机会,做大做强,打得别人胆战心惊,打得别人垂头丧气,打得别人失去理性,打得别人只想做大牌来回本,让别人在博弈中犯错。

自己手气不好,别人手气好,技巧来了。

反正自己手气不好,那就先破罐子破摔几把,准备几把牌乱打,做好输的心理准备(有人做大牌时候,还是稳住,见机行事,小输即可,不要越陷越深)。

别人做清一色,就故意打给他的上下家胡牌或者碰牌,减少那个人摸牌的次数。有针对性地去射飞他的牌,让他在心理上失衡,出现判断错误或者失去理智。多搞几次,运气好那个人,气势必定减弱。此招经过笔者多次使用,效果极佳。

碰牌可以打乱场上摸牌的顺序,我们在一些可碰可不碰的牌上,不按常理出牌,乱碰乱打,打乱场上的一边倒局势,让运势气势重新分配。

总结一下:

打麻将,益智娱乐,拒绝任何形式的赌博,一入赌博深似海,抽身困难,害己害家。

麻将,是有数学理论支撑的,有规律可遵循的,要多加学习和分析,为什么这么打。

多在实战中思考,复盘,及时修正自己的打牌习惯,总结自己的打牌思路。

多在实战中,观察别人的打牌习惯,知己知彼。

五、mahout面试题?

之前看了Mahout官方示例 20news 的调用实现;于是想根据示例的流程实现其他例子。网上看到了一个关于天气适不适合打羽毛球的例子。

训练数据:

Day Outlook Temperature Humidity Wind PlayTennis

D1 Sunny Hot High Weak No

D2 Sunny Hot High Strong No

D3 Overcast Hot High Weak Yes

D4 Rain Mild High Weak Yes

D5 Rain Cool Normal Weak Yes

D6 Rain Cool Normal Strong No

D7 Overcast Cool Normal Strong Yes

D8 Sunny Mild High Weak No

D9 Sunny Cool Normal Weak Yes

D10 Rain Mild Normal Weak Yes

D11 Sunny Mild Normal Strong Yes

D12 Overcast Mild High Strong Yes

D13 Overcast Hot Normal Weak Yes

D14 Rain Mild High Strong No

检测数据:

sunny,hot,high,weak

结果:

Yes=》 0.007039

No=》 0.027418

于是使用Java代码调用Mahout的工具类实现分类。

基本思想:

1. 构造分类数据。

2. 使用Mahout工具类进行训练,得到训练模型。

3。将要检测数据转换成vector数据。

4. 分类器对vector数据进行分类。

接下来贴下我的代码实现=》

1. 构造分类数据:

在hdfs主要创建一个文件夹路径 /zhoujainfeng/playtennis/input 并将分类文件夹 no 和 yes 的数据传到hdfs上面。

数据文件格式,如D1文件内容: Sunny Hot High Weak

2. 使用Mahout工具类进行训练,得到训练模型。

3。将要检测数据转换成vector数据。

4. 分类器对vector数据进行分类。

这三步,代码我就一次全贴出来;主要是两个类 PlayTennis1 和 BayesCheckData = =》

package myTesting.bayes;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.FileSystem;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.util.ToolRunner;

import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;

import org.apache.mahout.text.SequenceFilesFromDirectory;

import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;

public class PlayTennis1 {

private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";

/*

* 测试代码

*/

public static void main(String[] args) {

//将训练数据转换成 vector数据

makeTrainVector();

//产生训练模型

makeModel(false);

//测试检测数据

BayesCheckData.printResult();

}

public static void makeCheckVector(){

//将测试数据转换成序列化文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"testinput";

String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();

String[] params = new String[]{"-i",input,"-o",output,"-ow"};

ToolRunner.run(sffd, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("文件序列化失败!");

System.exit(1);

}

//将序列化文件转换成向量文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";

String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();

String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};

ToolRunner.run(svfsf, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("序列化文件转换成向量失败!");

System.out.println(2);

}

}

public static void makeTrainVector(){

//将测试数据转换成序列化文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"input";

String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();

String[] params = new String[]{"-i",input,"-o",output,"-ow"};

ToolRunner.run(sffd, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("文件序列化失败!");

System.exit(1);

}

//将序列化文件转换成向量文件

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";

String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";

Path in = new Path(input);

Path out = new Path(output);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();

String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};

ToolRunner.run(svfsf, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("序列化文件转换成向量失败!");

System.out.println(2);

}

}

public static void makeModel(boolean completelyNB){

try {

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";

String model = WORK_DIR+Path.SEPARATOR+"model";

String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";

Path in = new Path(input);

Path out = new Path(model);

Path label = new Path(labelindex);

FileSystem fs = FileSystem.get(conf);

if(fs.exists(in)){

if(fs.exists(out)){

//boolean参数是,是否递归删除的意思

fs.delete(out, true);

}

if(fs.exists(label)){

//boolean参数是,是否递归删除的意思

fs.delete(label, true);

}

TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();

String[] params =null;

if(completelyNB){

params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};

}else{

params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};

}

ToolRunner.run(tnbj, params);

}

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("生成训练模型失败!");

System.exit(3);

}

}

}

package myTesting.bayes;

import java.io.IOException;

import java.util.HashMap;

import java.util.Map;

import org.apache.commons.lang.StringUtils;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.fs.PathFilter;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

import org.apache.hadoop.io.Text;

import org.apache.mahout.classifier.naivebayes.BayesUtils;

import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;

import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;

import org.apache.mahout.common.Pair;

import org.apache.mahout.common.iterator.sequencefile.PathType;

import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;

import org.apache.mahout.math.RandomAccessSparseVector;

import org.apache.mahout.math.Vector;

import org.apache.mahout.math.Vector.Element;

import org.apache.mahout.vectorizer.TFIDF;

import com.google.common.collect.ConcurrentHashMultiset;

import com.google.common.collect.Multiset;

public class BayesCheckData {

private static StandardNaiveBayesClassifier classifier;

private static Map<String, Integer> dictionary;

private static Map<Integer, Long> documentFrequency;

private static Map<Integer, String> labelIndex;

public void init(Configuration conf){

try {

String modelPath = "/zhoujianfeng/playtennis/model";

String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";

String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";

String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";

dictionary = readDictionnary(conf, new Path(dictionaryPath));

documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));

labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));

NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);

classifier = new StandardNaiveBayesClassifier(model);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

System.out.println("检测数据构造成vectors初始化时报错。。。。");

System.exit(4);

}

}

/**

* 加载字典文件,Key: TermValue; Value:TermID

* @param conf

* @param dictionnaryDir

* @return

*/

private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {

Map<String, Integer> dictionnary = new HashMap<String, Integer>();

PathFilter filter = new PathFilter() {

@Override

public boolean accept(Path path) {

String name = path.getName();

return name.startsWith("dictionary.file");

}

};

for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {

dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());

}

return dictionnary;

}

/**

* 加载df-count目录下TermDoc频率文件,Key: TermID; Value:DocFreq

* @param conf

* @param dictionnaryDir

* @return

*/

private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {

Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();

PathFilter filter = new PathFilter() {

@Override

public boolean accept(Path path) {

return path.getName().startsWith("part-r");

}

};

for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {

documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());

}

return documentFrequency;

}

public static String getCheckResult(){

Configuration conf = new Configuration();

conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));

String classify = "NaN";

BayesCheckData cdv = new BayesCheckData();

cdv.init(conf);

System.out.println("init done...............");

Vector vector = new RandomAccessSparseVector(10000);

TFIDF tfidf = new TFIDF();

//sunny,hot,high,weak

Multiset<String> words = ConcurrentHashMultiset.create();

words.add("sunny",1);

words.add("hot",1);

words.add("high",1);

words.add("weak",1);

int documentCount = documentFrequency.get(-1).intValue(); // key=-1时表示总文档数

for (Multiset.Entry<String> entry : words.entrySet()) {

String word = entry.getElement();

int count = entry.getCount();

Integer wordId = dictionary.get(word); // 需要从dictionary.file-0文件(tf-vector)下得到wordID,

if (StringUtils.isEmpty(wordId.toString())){

continue;

}

if (documentFrequency.get(wordId) == null){

continue;

}

Long freq = documentFrequency.get(wordId);

double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);

vector.setQuick(wordId, tfIdfValue);

}

// 利用贝叶斯算法开始分类,并提取得分最好的分类label

Vector resultVector = classifier.classifyFull(vector);

double bestScore = -Double.MAX_VALUE;

int bestCategoryId = -1;

for(Element element: resultVector.all()) {

int categoryId = element.index();

double score = element.get();

System.out.println("categoryId:"+categoryId+" score:"+score);

if (score > bestScore) {

bestScore = score;

bestCategoryId = categoryId;

}

}

classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";

return classify;

}

public static void printResult(){

System.out.println("检测所属类别是:"+getCheckResult());

}

}

六、webgis面试题?

1. 请介绍一下WebGIS的概念和作用,以及在实际应用中的优势和挑战。

WebGIS是一种基于Web技术的地理信息系统,通过将地理数据和功能以可视化的方式呈现在Web浏览器中,实现地理空间数据的共享和分析。它可以用于地图浏览、空间查询、地理分析等多种应用场景。WebGIS的优势包括易于访问、跨平台、实时更新、可定制性强等,但也面临着数据安全性、性能优化、用户体验等挑战。

2. 请谈谈您在WebGIS开发方面的经验和技能。

我在WebGIS开发方面有丰富的经验和技能。我熟悉常用的WebGIS开发框架和工具,如ArcGIS API for JavaScript、Leaflet、OpenLayers等。我能够使用HTML、CSS和JavaScript等前端技术进行地图展示和交互设计,并能够使用后端技术如Python、Java等进行地理数据处理和分析。我还具备数据库管理和地理空间数据建模的能力,能够设计和优化WebGIS系统的架构。

3. 请描述一下您在以往项目中使用WebGIS解决的具体问题和取得的成果。

在以往的项目中,我使用WebGIS解决了许多具体问题并取得了显著的成果。例如,在一次城市规划项目中,我开发了一个基于WebGIS的交通流量分析系统,帮助规划师们评估不同交通方案的效果。另外,在一次环境监测项目中,我使用WebGIS技术实现了实时的空气质量监测和预警系统,提供了准确的空气质量数据和可视化的分析结果,帮助政府和公众做出相应的决策。

4. 请谈谈您对WebGIS未来发展的看法和期望。

我认为WebGIS在未来会继续发展壮大。随着云计算、大数据和人工智能等技术的不断进步,WebGIS将能够处理更大规模的地理数据、提供更丰富的地理分析功能,并与其他领域的技术进行深度融合。我期望未来的WebGIS能够更加智能化、个性化,为用户提供更好的地理信息服务,助力各行各业的决策和发展。

七、freertos面试题?

这块您需要了解下stm32等单片机的基本编程和简单的硬件设计,最好能够了解模电和数电相关的知识更好,还有能够会做操作系统,简单的有ucos,freeRTOS等等。最好能够使用PCB画图软件以及keil4等软件。希望对您能够有用。

八、paas面试题?

1.负责区域大客户/行业客户管理系统销售拓展工作,并完成销售流程;

2.维护关键客户关系,与客户决策者保持良好的沟通;

3.管理并带领团队完成完成年度销售任务。

九、面试题类型?

你好,面试题类型有很多,以下是一些常见的类型:

1. 技术面试题:考察候选人技术能力和经验。

2. 行为面试题:考察候选人在过去的工作或生活中的行为表现,以预测其未来的表现。

3. 情境面试题:考察候选人在未知情境下的决策能力和解决问题的能力。

4. 案例面试题:考察候选人解决实际问题的能力,模拟真实工作场景。

5. 逻辑推理题:考察候选人的逻辑思维能力和分析能力。

6. 开放性面试题:考察候选人的个性、价值观以及沟通能力。

7. 挑战性面试题:考察候选人的应变能力和创造力,通常是一些非常具有挑战性的问题。

十、cocoscreator面试题?

需要具体分析 因为cocoscreator是一款游戏引擎,面试时的问题会涉及到不同的方面,如开发经验、游戏设计、图形学等等,具体要求也会因公司或岗位而异,所以需要根据实际情况进行具体分析。 如果是针对开发经验的问题,可能会考察候选人是否熟悉cocoscreator常用API,是否能够独立开发小型游戏等等;如果是针对游戏设计的问题,则需要考察候选人对游戏玩法、关卡设计等等方面的理解和能力。因此,需要具体分析才能得出准确的回答。

相关资讯
热门频道

Copyright © 2024 招聘街 滇ICP备2024020316号-38