求智慧中国杯 大神代码编个100行的简单代码

下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
一道很简单的题,我懒得算,求大神帮忙编个小程序,最好vb的,语言简单一点,我才刚学(365*364*363*.......*342)/365^24
SUM=1for i=0 to 23SUM=SUM*(365-i)/365next
靠,这个还很简单啊?你不用数列或者其它外门邪道的简便算法你这能简单啊!答案应该是0. 不过我可是没想到什么简洁的算法 数列也早已遗忘在初恋年代
我是直接在XCEL套了公式算的
不知道准不准.
为您推荐:
扫描下载二维码统计学习方法(39)
数据结构与算法(30)
机器学习(73)
一个好的推荐系统推荐的精度必然很高,能够真的发现用户的潜在需求或喜好,提高购物网詀的销量,让视频网站发现用户喜欢的收费电影… 可是要实现一个高精度的推荐系统不是那么容易的,netflix曾经悬赏高额奖金寻找能给其推荐系统的精确度提高10%的人,可见各个公司对推荐系统的重视和一个好的推荐系统确实能带来经济效益。
下面咱以电影电视的推荐系统为例,一步一步的来实现一个简单的推荐系统吧, 由于比较简单,整个推荐系统源码不到100行,大概70-80行吧,应该很容易掌握。 为了快速开发原型,咱采用Python代码来演示
1. &推荐系统的第一步,需要想办法收集信息
不同的业务,不同的推荐系统需要收集的信息不一样 针对咱要做的电影推荐,自然是每个用户对自己看过的电影的评价了,如下图所示:
RecommandationSystem_Estimate_Data
Kai Zhou对Friends打分是4分, 对Bedtime Stories打分是3分,没有对RoboCop打分 Shuai Ge没有对Friends打分,对Bedtime Stories打分是3.5分 …… 为简单,咱将此数据存成csv文件,形成一个二维的矩阵,假设存在D:\train.csv, 数据如下:
Name,Friends,Bedtime Stories,Dawn of the Planet of the Apes,RoboCop,Fargo,Cougar Town
Kai Zhou,4,3,5,,1,2
Shuai Ge,,3.5,3,4,2.5,4.5
Mei Nv,3,4,2,3,2,3
xiaoxianrou,2.5,3.5,3,3.5,2.5,3
fengzhi,3,4,,5,3.5,3
meinv,,4.5,,4,1,
mincat,3,3.5,1.5,5,3.5,3
alex,2.5,3,,3.5,,4
先从csv文件中加载二维矩阵,代码如下: &
def load_matrix():
matrix = {}
f = open(&d:\\train.csv&)
columns = f.readline().split(',')
for line in f:
scores = line.split(',')
for i in range(len(scores))[1:]:
matrix[(scores[0], columns[i])] = scores[i].strip(&\n&)
return matrix
matrix = load_matrix()
print &matrix:&, matrix
load_matrix()解析csv文件,返回一个dictionary, 该dictionary以(行名,列名)为索引
数据有了,下面咱就正式开始干活了 ,推荐系统要干些什么呢?
咱以电影推荐来说,推荐系统需要解决的几个主要问题:
1. 判断两个电影,两个观影人之间的相似度
2. 找到和某影片最相似的影片, 或找到和某观影人有同样兴趣的人
3. 找到某观影人可能喜欢的电影,或找到对某影片感兴趣的人
&2. 推荐系统的基础,判断相似度
针对咱的电影推荐来说,就是判断两个电影,两个观影人之间的相似度。&2.1 欧几里德距离计算相似度最简单的,最容易理解的就是欧几里德距离. 那么,什么是欧几里德距离,怎么用呢? 请对比评价数据,看下图:
EuclideanDistance
咱用两个电影Fargo和Cougr Town来取例 图中X轴代表电影Fargo, &Y轴代表电影Cougr Town, &Kai Zhou给电影Fargo 打1分,Cougr Town打2分,画到图上
同理,咱可以将Shuai Ge和Mei Nv的数据点都画到图上 很明显,咱可以看出Kai Zhou与Mei Nv 离得近,与Shuai Ge离得远,所以说Kai Zhou与Mei Nv的兴趣更相近. 用数学式子表达出来就是:
Kai Zhou与Mei Nv的距离的平方: & &(2 – 1)^2 + (3 – 2)^2 = 2
Kai Zhou 与Shuai Ge的距离的平方: (2.5 – 1)^2 + (4.5 – 2)^2 = 8.5
2 & 8.5, 所以Kai Zhou与Mei Nv比Shuai Ge兴趣更近. 这就是利用欧几里得距离来判断相似度 & 两个用户对所有电影的评价相似度的和,就是两用户的相似度
2.2 归一化处理
为了方便比较处理后的数据,一般还需要对计算出来的结果进行归一化处理。
数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。
原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。
上面的介绍太学术化了吧,不容易懂,我的理解:归一化化就是要把你需要处理的数据经过处理后(通过某种算法)限制在你需要的一 定范围内。
简单的说,我们希望,处理后的数据取值范围在0-1之间. 在数学上有很多归一化处理的方法 常用的有
一、min-max标准化(Min-Max Normalization)
也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 – 1]之间。
二、Z-score标准化方法
这种方法给予原始数据的均值(mean)和标准差(standard deviation)进行数据的标准化。经过处理的数据符合标准正态分布,即均值为0,标准差为1
咱可以根据需要选择,不过,针对咱这系统采用的是欧几里德距离,咱可以用下面的更简单的公式:
假设计算出来的欧几里德距离为:n
1 / (1 + n)
当距离为0,归一化后的值为:1
距离越大,归一化后的值越接近0
有了上面的基础知识之后,下面的代码就水到渠成了
def sim_distance(matrix, row1, row2):
columns = set(map(lambda l: l[1], matrix.keys()))
si = filter(lambda l: matrix.has_key((row1, l)) and matrix[(row1, l)] != && and matrix.has_key((row2, l)) and matrix[(row2, l)] != &&, columns)
if len(si) == 0: return 0
sum_of_distance = sum([pow(float(matrix[(row1, column)]) - float(matrix[(row2, column)]), 2) for column in si])
return 1 / (1 + sqrt(sum_of_distance))
print sim_distance(matrix, &Kai Zhou&, &Shuai Ge&)
3. 找到和和某观影人有同样兴趣的人,某影片最相似的影片
a.有了上面的代码,找到和某用户有同样兴趣的人,就非常简单了。只要将某用户和其它所有用户的相似度计算出来,排下序就行了。
def top_matches(matrix, row, similarity=sim_distance):
rows = set(map(lambda l: l[0], matrix.keys()))
scores = [(similarity(matrix, row, r), r) for r in rows if r != row]
scores.sort()
scores.reverse()
return scores
person = &Kai Zhou&
print &top match for:&, person
print top_matches(matrix, person)
& & b. 找到和某影片相似的影片,这个需要稍微变化下。咱的输入数据是以用户为行数据,影片为列数据, 只要改成以影片为行数据,用户为列数据,一样的调用。 所以需要一个函数,将矩阵转置
def transform(matrix):
rows = set(map(lambda l: l[0], matrix.keys()))
columns = set(map(lambda l: l[1], matrix.keys()))
transform_matrix = {}
for row in rows:
for column in columns:
transform_matrix[(column, row)] = matrix[(row, column)]
return transform_matrix
找到和Friends 相似的影片:
trans_matrix = transform(matrix)
print &trans:&, trans_matrix
film = &Friends&
print &top match for:&, film
print top_matches(trans_matrix, film)
4.&找到某观影人可能喜欢的电影,找到对某影片感兴趣的人
最理想的是找到两个相似度一样的人,可以认为某个人喜欢的电影,另外那个也喜欢。 但是这样有它的缺点,比较好的办法是把所有人的数据都用上,方法如下: 1. 先计算所有人和Kai Zhou的相似度 2. 对于Kai Zhou没有看过,没有评分,而其它人有评分的的影片, &将其评分与相似度相乘,得到的值再除以相似度之和 3. 排序 & 咱先以给Kai Zhou推荐影片为例来说明, Dawn of the Planet of the Apes&和 RoboCop 这两部影片Kai Zhou都没有看,我们该推荐他看哪部呢?
假设我们计算出来Kai Zhou与其它人的相似度如下:
[(0.3333, ‘Mei Nv’),
(0.54946, ‘xiaoxianrou’),
(0.2857, ‘alex’),
(0.6867, ‘mincat’),
(0.072, ‘Shuai Ge’),
(0.4073, ‘fengzhi’)]
即Kai Zhou与Mei Nv 相似度为0.3333, &与xiaoxiaorou相似度为0.54946, &其它类似… 那么计算Dawn of the Planet of the Apes对Kai Zhou的推荐值过程如下:
1. 找到Shuai Ge对Dawn of the Planet of the Apes的评价值 &乘以Shuai Ge与Kai Zhou的相似度: & 3 * &0.072
2. 找到Mei Nv对Dawn of the Planet of the Apes的评价值 &乘以其与Kai Zhou的相似度: 2 *&0.3333
3.&找到xiaoxianrou 对Dawn of the Planet of the Apes的评价值 &乘以其与Kai Zhou的相似度: 3 *&0.54946
4.&fengzhi 没有对Dawn of the Planet of the Apes评价,不用计算
5.&找到mincat对Dawn of the Planet of the Apes的评价值 &乘以其与Kai Zhou的相似度: 1.5&*&0.6867
6.&alex&没有对Dawn of the Planet of the Apes评价,不用计算
7. 将 1, 2, 3, 5 步的计算结果相加 得到:&3 * &0.072 +&2 *&0.3333 +&&3 *&0.54946 +&&1.5&*&0.6867 =&2.0612
8. &将1,2,3,5步的参与计算的人的相似度相加:&0.072 +&&0.3333 +&0.54946 +&&0.6867 =&1.6416
9. &将第7步结果除以第8步的结果,就是Dawn of the Planet对Kai Zhou的推荐值:&2.0612 /&1.6416 =&2.047
同样的方法,计算出来RoboCop 对Kai Zhou的推荐值为:3.3326 所以RoboCop应该对Kai Zhou的吸引力比Dawn of the Planet of the Apes更大. 代码如下:
def get_recommendations(matrix, row, similarity=sim_distance):
rows = set(map(lambda l: l[0], matrix.keys()))
columns = set(map(lambda l: l[1], matrix.keys()))
sum_of_column_sim = {}
sum_of_column = {}
for r in rows:
if r == row: continue
sim = similarity(matrix, row, r)
if sim &= 0:
for c in columns:
if matrix[(r, c)] == &&: continue
sum_of_column_sim.setdefault(c, 0)
sum_of_column_sim[c] += sim
sum_of_column.setdefault(c, 0)
sum_of_column[c] += float(matrix[(r, c)]) * sim
scores = [(sum_of_column[c] / sum_of_column_sim[c], c) for c in sum_of_column]
scores.sort()
scores.reverse()
return scores
print get_recommendations(matrix, person)
找到对某影片感兴趣的人和之前类似,需要将矩阵转置就行了,代码如下:
trans_matrix = transform(matrix)
print get_recommendations(trans_matrix,
&Friends&)
这就是一个简单的推荐系统的雏型,当然,要实现一个可用的推荐系统,还有很多工作要做。比如推荐的精确度,用户喜欢打斗片,咱不可能给他推荐爱情片吧?比如数据量大了之后,性能问题,扩展性?是基于用户推荐还是物品推荐?……
5. 参考资料
我为了了解学习推荐系统,找了一些资料,觉得下面的书值得阅读:
1.《推荐系统实践》项亮
入门级教材,很薄,可以很快就看完,把很多基础而简单的问题讲的很详细。总体来说,此书性价比很高,值得入手一本研读
我买书喜欢上亚马逊, 因为亚马逊上很多都可以试读,这本书亚马逊就提供了试读,推荐大家先去试读下,再决定有没有购买价值。
2.《Recommender&Systems&Handbook》Paul&B.&Kantor
有这本书就不用其它的了,很细很全,就是英文原版的有点小贵,真有志于做推荐系统的才去买吧,用到哪就翻书查。按人家的说法,所有敢自称handbook的书都是神书,没看过这本书出去吹牛逼时你都不好意思说自己是做推荐的。
本文固定链接:&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:255078次
积分:3460
积分:3460
排名:第7736名
原创:26篇
转载:370篇
评论:25条
(1)(1)(1)(1)(3)(30)(47)(17)(16)(34)(38)(18)(41)(27)(17)(32)(15)(21)(11)(7)(5)(10)(4)(1)六道简单的java编程题,求解,求完整代码
100Adward_Webca]
六道简单的java编程题,求解,求完整代码
100Adward_Webca]
发布时间: 3:21:42
编辑:www.fx114.net
本篇文章主要介绍了"六道简单的java编程题,求解,求完整代码
100Adward_Webca]",主要涉及到六道简单的java编程题,求解,求完整代码
100Adward_Webca]方面的内容,对于六道简单的java编程题,求解,求完整代码
100Adward_Webca]感兴趣的同学可以参考一下。
1.定义一个学生类,要求:包含属性“姓名”和“总人数”,包含方法“显示学生姓名”、“显示总人数”,编写程序进行验证。
2.编写一个完整的Java&Application程序,包含类Person、TestPerson,具体要求如下:
(1)Person类
name:String对象,表示姓名
sex:char类型,表示性别
id:String对象,表示身份证号码
phone:String对象,表示联系电话
email:String对象,表示E-mail地址
Person(String&name,char&sex,String&id):构造方法
void&setEmail&(String&email)设置E-mail地址
void&setPhone&(String&phone)设置联系电话
public&String&toString&():返回个人的各项信息,包括姓名、性别都上述属性
(2)类TestPerson作为主类,完成如下测试功能
①用以下信息生成一个Person对象aPerson
姓名:张三
身份证号:010001
②设置E-mail:
设置联系电话:
③输出对象aPerson的各项信息
3.编写一个图形用户界面的Application程序,包含一个带文本和图标的JButton对象,文本为“按钮”。当用户单击这个按钮时,&Application程序将其文本修改为“单击按钮”。
4.编写程序实现如下功能:第一个线程打印了6个a,第二个线程打印8个b,第三个线程打印数字1到10,第二个线程和第三个线程要在第一个线程打印完成后才能开始打印。
5.假设有一百张票由四个售票点同时在卖,请用多线程来编程此售票过程(请在编程中避免出现一张票号被打印多次以及出现0和负数票号的情况)。
6.在项目中创建Writer作者类,该类继承Thread类并重写run()方法成为线程类,在主方法中创建两个作者类的实例对象。分别设置name属性为“作者1”和“作者2”,然后同时启动两个线程,在控制台查看两个线程的运行情况。简单你还伸手,还六题
作业还是自己写好引用&1&楼&czarten&的回复:简单你还伸手,还六题
作业还是自己写好
上面是期末考试老师给的题目中六道题目,其他的好不容易搞出来了,但这些不会啊
我本人喜欢linux和php,java是学校的规定课程,对这个既不擅长,又不感兴趣
上面的题目可能是考试的题目
求大神高抬贵手,指点一下吧
27就考试了,最好还是今天搞好第一题:package&csdn.programbbs_625;
import&java.util.ArrayL
public&class&Student&{
public&void&setName(String&name)&{
this.name.add(name);
public&void&setNum(int&num)&{
this.num&=&
private&int&
ArrayList&String&&name&=&new&ArrayList&String&();
public&void&displayname(){
System.out.print("The&student&name:&");
for(int&i=0;&i&name.size();&i++)
System.out.print(name.get(i)&+&"&");
System.out.println();
public&void&displaynum(){
System.out.println("The&number&of&student:&"&+&num);
package&csdn.programbbs_625;
public&class&TestStudent&{
public&static&void&main(String[]&args)&{
Student&stu&=&new&Student();
stu.setNum(5);
stu.setName("aaa");
stu.setName("bbb");
stu.setName("abc");
stu.setName("cba");
stu.displayname();
stu.displaynum();
}第二题:Person类
package&csdn.programbbs_625;
public&class&Person&{
public&String&toString()&{
return&name&+&"&"&+&sex&+&"&"&+&id&+&"&"&+&phone&+&"&"&+&
public&void&setPhone(String&phone)&{
this.phone&=&
public&void&setEmail(String&email)&{
this.email&=&
public&Person(String&name,&char&sex,&String&id)&{
this.name&=&
this.sex&=&
this.id&=&
private&String&
private&String&
private&char&
private&String&
private&String&
TextPerson类:
package&csdn.programbbs_625;
public&class&TextPerson&{
public&static&void&main(String[]&args)&{
Person&aPerson&=&new&Person("张三",&'男',&"010001");
aPerson.setEmail("");
aPerson.setPhone("");
System.out.println(aPerson.toString());
package&csdn.programbbs_625;
import&java.awt.FlowL
import&java.awt.event.MouseA
import&java.awt.event.MouseE
import&javax.swing.JB
import&javax.swing.JF
public&class&TextJButton&extends&JFrame{
public&TextJButton(){
this.setSize(350,&370);
this.setVisible(true);
this.setLayout(new&FlowLayout());
final&JButton&jb&=&new&JButton("按钮");
jb.addMouseListener(new&MouseAdapter()&{
public&void&mouseClicked(MouseEvent&e){
jb.setText("点击按钮");
repaint();
this.add(jb);
public&static&void&main(String[]&args)&{
new&TextJButton();
package&zhangming.csdn.
class&MyThread&implements&Runnable
private&int&ticket=100;
public&void&run()
while(ticket&&&0)
//先睡眠,后锁定,以便让其他线程进来
Thread.sleep(1000);
}catch(InterruptedException&e){e.printStackTrace();}
//在进行售票时,需要进行锁定
synchronized(this)
if(ticket&0)
System.out.println(Thread.currentThread().getName()+"卖掉第"+ticket--+"张票");
public&class&SynchronizedDemo
public&static&void&main(String&args[])
MyThread&mt&=&new&MyThread();
Thread&t1&=&new&Thread(mt,"窗口1");
Thread&t2&=&new&Thread(mt,"窗口2");
Thread&t3&=&new&Thread(mt,"窗口3");
Thread&t4&=&new&Thread(mt,"窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}&没错...最近穷死了...没分下载了。路过求粉栽在csdn上了,不能连续评论3次!
第四题package&csdn.programbbs_625;
import&java.lang.T
class&MyThread1&extends&Thread{
public&void&run()&{
System.out.println("aaaaaa");
class&MyThread2&extends&Thread{
public&void&run()&{
System.out.println("bbbbbbbb");
class&MyThread3&implements&Runnable&{
public&int&x&=&0;
public&void&run()&{
System.out.println(++x);
public&class&TextThread&{
public&static&void&main(String[]&args)&{
Thread&t1&=&new&MyThread1();
Thread&t2&=&new&MyThread2();
synchronized&(t1)&{
t1.start();
MyThread3&r&=&new&MyThread3();
for&(int&i&=&0;&i&&&10;&i++)&{
Thread&t3&=&new&Thread(r);
t3.start();
t2.start();
}第五题:跟楼上的差不多,数字改变下
package&csdn.programbbs_625;
class&Threadmy&implements&Runnable
private&int&ticket=0;
public&void&run()
while(ticket&&&100)
//先睡眠,后锁定,以便让其他线程进来
Thread.sleep(1000);
}catch(InterruptedException&e){e.printStackTrace();}
//在进行售票时,需要进行锁定
synchronized(this)
if(ticket&&&100)
System.out.println(Thread.currentThread().getName()+"卖掉第"&+&++ticket&+"张票");
public&class&SynchronizedDemo
public&static&void&main(String&args[])
Threadmy&mt&=&new&Threadmy();
Thread&t1&=&new&Thread(mt,"窗口1");
Thread&t2&=&new&Thread(mt,"窗口2");
Thread&t3&=&new&Thread(mt,"窗口3");
Thread&t4&=&new&Thread(mt,"窗口4");
t1.start();
t2.start();
t3.start();
t4.start();
}第六题:题目描述的太简单了,我觉得应该是让你写死锁的。这边给你一个死锁的程序,具体你改下就好了
package&csdn.programbbs_625;
//死锁的实现
public&void&get(){
System.out.println("A说:我开始启动了,B,给我你的资源");
public&void&say(){
System.out.println("A获得资源");
public&void&get(){
System.out.println("B说:我开始启动了,A,给我你的资源");
public&void&say(){
System.out.println("B获得资源");
class&MyThread&implements&Runnable
public&static&A&a&=&new&A();
public&static&B&b&=&new&B();
public&boolean&flag&=&
public&void&run(){
synchronized(a){
Thread.sleep(500);
}catch(InterruptedException&e){}
synchronized(b){ &//此同步代码块在另一同步代码块里
synchronized(b){
Thread.sleep(500);
}catch(InterruptedException&e){}
synchronized(a){&&&&&//此同步代码块在另一同步代码块里
public&class&Demo24
public&static&void&main(String&args[]){
MyThread&mt1&=&new&MyThread();
MyThread&mt2&=&new&MyThread();
Thread&th1&=&new&Thread(mt1);
Thread&th2&=&new&Thread(mt2);
th1.start();
th2.start();
本文标题:
本页链接:

我要回帖

更多关于 fkzhang大神源代码 的文章

 

随机推荐