大数据 机器学习 算法概论

 
 

视频解析  https://edu.csdn.net/course/play/7813

算法概述

算法是计算机科学领域最重要的基石之一,计算机语言和开发平台日新月异,但万变不离其宗的是那些算法和理论,数据结构和算法是软件开发必备的核心基础,是内功心法。下面举例拿推荐算法和分类算法的实际场景做下举例:

推荐算法的应用场景,各种app(偏资讯)的应用外的手机推荐:

上面可以看出有米饭资讯,优酷视频,抖音短视频等推荐,他们都倾向于在下班休息的碎片时间进行推送。他们有的是根据你的关注和兴趣进行提醒,有的是根据当下社会热点进行推荐,还有的就是优惠券性质的推送。

再有就是应用内的推荐:

 

可以看出手机购物时,当我们搜索某家商店的某件商品时。系统会根据我们的搜索历史和购买历史进行相似物品的推荐。

分类算法(医学上的肿瘤判断)

如何判断细胞是否属于肿瘤细胞呢?肿瘤细胞和普通细胞,有差别。但是,需要非常有经验的医生,通过病理切片才能判断。如果通过机器学习的方式,使得系统自动识别出肿瘤细胞。此时的效率,将会得到飞速的提升。并且,通过主观(医生)+客观(模型)的方式识别肿瘤细胞,结果交叉验证,结论可能更加靠谱。

如何操作?通过分类模型识别。简言之,包含两个步骤。首先,通过一系列指标刻画细胞特征,例如细胞的半径、质地、周长、面积、光滑度、对称性、凹凸性等等,构成细胞特征的数据。其次,在细胞特征宽表的基础上,通过搭建分类模型进行肿瘤细胞的判断。

对于我们来说最简单的应用案例。请看如下代码应用

对于我们来说最简单的应用案例。请看如下代码应用,根据班级同学不同的分段给出评级。一个班级里不同分段的人数不是相等的,而是有着峰值和低谷。案例:将学生的百分制成绩转换为五分制成绩:≥90 分: A,80~89分: B,70~79分: C,60~69分: D,<60分: E。一般程序写法:

/**
 * @author 张晨光
 * 测试成绩结果算法1
 */
public class TestOne {
	public static String getGrade(int grade){
		String result="";
		if(grade<60){
			result="E";
		}else if(grade<70){
			result="D";
		}else if(grade<80){
			result="C";
		}else if(grade<90){
			result="B";
		}else{
			result="A";
		}
		return result;
	}
}

如果学生的总成绩数据有10000条,则5%的数据需 1 次比较,15%的数据需 2 次比较,40%的数据需 3 次比较,40%的数据需 4 次比较,因此10000 个数据比较的

次数为:  10000 (5%+2×15%+3×40%+4×40%)=31500次

此种形状的二叉树,需要的比较次数是:10000 (3×20%+2×80%)=22000次,显然:两种判别树的效率是不一样的。

因此,不同的算法程序的执行效率是不一样的,我们尽量找到最优算法,提高程序的执行效率。就像你编游戏,人口最高只敢100,否则机器就特慢,人家就敢让人口到300;你的农民遇到石头就停住了,人家的农民就能绕过去,找最近的路。这些都离不开算法工程师的功劳。

所谓“算法”是指解决问题的一种方法步骤或者一个过程。

一个算法应该具有以下几个重要的特征。

(1)输入:一个算法应该有n(n≥0)个初始的输入数据。

(2)输出:一个算法可以没有或有一个或多个输出信息,它们与输入数据之间会有着某种特定的关系。

(3)确定性:算法中的每一个步骤都必须具有确切的含义,不能有二义性。

(4)可行性:算法中描述的每一个操作步骤都必须是可以执行的,也就是说,都可以通过计算机实现。

(5)有穷性:一个算法必须在经历有限个步骤之后正常结束,不能形成死循环。                         

思考题,3个数中求最大值,比较下哪种算法比较好!!!

/**
 * 
 * @author 张晨光
 * 求3个数中的最大值
 * 
 */
public class TestFour {
	public static int getMax1(int a,int b,int c){
		int max;
		if(a>b&&a>c){
			max=a;
		}else if(c>a&&c>b){
			max=c;
		}else
			max=b;
		return max;
	}
	//第2种写法,其他比较幼稚的写法,暂时不再提供
	public static int getMax2(int a,int b,int c){
		int max=a;
		if(b>max){
			max=b;
		}
		if(c>max){
			max=c;
		}
		return max;
	}
	//三元运算符;
	public static int getMax3(int a,int b,int c){
		int max=(a>b)?a:b;
		max=(max>c)?max:c;
		//或者老老司机写的
		max =((a > b ? a : b) > c) ? (a > b ? a : b) : c;
		return max;
	}
}


猜你喜欢

转载自blog.csdn.net/zhangchen124/article/details/79908375