精华内容
下载资源
问答
  • 点击上方“摸鱼吧算法工程师”卡片,关注星标获取有趣、好玩的前沿干货!【导读】今天给大家推荐一门清华大学最新经典课程-《高级机器学习》,本文为大家整理收集了该课程的课件PPT以及该课程邀请了...

    点击上方“摸鱼吧算法工程师”卡片,关注星标

    获取有趣、好玩的前沿干货!

    【导读】今天给大家推荐一门清华大学最新经典课程-《高级机器学习》,本文为大家整理收集了该课程的课件PPT以及该课程邀请了Jian Tang 、李航、杨强、李沐、李磊等5位AI专家做了特邀主题报告,文末附下载方式!

    课程简介:

    近年随着数据复杂度的不断提高,经典机器学习算法已经很难满足实际需求,适应于不同复杂环境、不同领域的学习机制和学习方法不断涌现,针对复杂数据对象、复杂任务和模拟人脑思维过程的机器学习理论逐渐成为数据挖掘和智能信息处理的主流。掌握并熟练应用这些新型机器学习理论和相关算法成为计算机学科研究生必备的技能之一。

    本课程基于经典机器学习算法,重点介绍近年流行的机器学习理论和算法,并通过提供的统一实验验证平台进行实践,可以使学生不仅能够熟练掌握先进的机器学习理论知识,并能学习将其应用于新一代信息智能处理的系统方法。

    课程资料和专家特邀报告下载:

    1. 点击下面链接进入公众号:“摸鱼吧算法工程师

    2. 在公众号消息对话框回复:THU” 即可以获取哈~

    课程大纲

     课程主要介绍机器学习的理论和相关算法;课程内容涵盖基础篇:经典机器学习方法的回顾、概率图生成模型(Generative learning)和概率图判别模型(Discriminative learning),进阶篇:介绍最近流行的深度学习、表示学习、增强学习、自动机器学习以及对抗学习,高级篇:介绍当前热点的预训练、自学习以及认知图谱等。具体内容包括:

    课程资料和专家特邀报告下载:

    1. 点击下方链接,关注公众号:“摸鱼吧算法工程师

    2. 在公众号消息对话框回复:THU” 即可以获取哈~

    展开全文
  • 机器学习之回归

    2021-03-15 21:02:40
    机器学习之回归 什么是人工智能(AI) 回归 第一步:构建模型 第二部:功能完善 第三步:选取最好的结果 loss 结果展示 模型调整 过拟合 丝滑的loss 什么是人工智能(AI) 人工智能(AI)长远以来的目标:希望机器...

    什么是人工智能(AI)

    人工智能(AI)长远以来的目标:希望机器可以和人一样聪明。

    机器学习的三要素:

    • 确定一个函数
    • 选择一个度量值用于衡量一个方法
    • 一个好的算法从中选择最好的结果

    什么是人工智能的学习呢?
    并不是那种已经计划好的使用判语句进行处理的内容,那种“人工智能”就类似于我们说的“人工智障”,只能够处理预期的内容,其他的一概不会。到最后啼笑皆非。

    • 真正的人工智能需要经过模型的定义通过大量数据的学习后认知和了解有关的特征,最后可以对没有见过的数据进行预测。
    • 原理:人类认知事物是有一个时间的,通过不断的摸索才能够获得有关的知识与认知。而人工智能就是模仿人类对事物的认知来进行训练的。
    • 举例:第一个吃螃蟹的人,在观察事物中不断的探索,最后经过大家的不断尝试 确认螃蟹是可以吃的,但是不是每个人都可以吃,有些 人会过敏!
      而人工智能就是把大量的数据存入模型让模型去训练,一遍遍的探索,最后获得一个比较好的认知结果。有可能把数据放进模型经过几千轮的迭代就类似于人类数百年的学习和探索。
      注: 以上内容源于个人理解!

    不同的内容学习办法、学习方式、获得结果也不尽相同。
    回归:
    通过以前的一些数据对未来的数据进行预测,得到的输出是一个结果。
    最经典的:波士顿房价预测

    分类:
    通过输出可以分为:二分类和多分类。
    二分类:得到两个输出,类似于yes or no。
    多分类:需要一个列表,输出的是列表中每个数据的可能性。

    除了上面属于监督式学习还有半监式、非监督式、迁移学习、强化学习……

    在这里插入图片描述
    以上是目前AI道路上的主要或主流学习方式内方法,需要更据实际情况进行学习和参考,通过不断积累的经验进行训练和强化,才能够获得更好的model才能够有更加优秀的人工智能产品。

    回归

    (小期许:期待李老师早日回归 (私货))

    第一步:构建模型

    在这里插入图片描述
    根据一个实际情况对模型进行构建。如上图就构建了一个二元一次的线性模型。里面对wb是未知的需要我们的模型进行一个列举然后获得对应的结果。

    第二部:功能完善

    在这里插入图片描述
    在这里插入图片描述

    通过数据处理与查看,进一步了解我们所需要的内容,对数据进行处理和对模型的完善。

    第三步:选取最好的结果

    在这里插入图片描述
    通过对模型的训练我们可以通过优化函数找到我们效果最好的那个值并且把他应用于我们的模型中。

    loss

    • 一个未知数的loss变化:
      在这里插入图片描述

    我们通过学习率和所在的切线dL/dw(微分)的乘积得到我们需要“走”(移动)的距离然后和原数据的差距就可以到下一个点然后继续之前的步骤,直到到达最低点

    在这里插入图片描述
    如上图所示当移动到wT点时数据就会停下来。因为无论学习率和斜率的乘积都是0就不会运动了,这个就是目前的一个结果。

    • 两个未知数的loss
      在这里插入图片描述

    先初始化两值w0b0
    接着计算:
    w = w0 ; b = b0时w对loss的偏微分,b对loss的偏微分。
    更新参数:
    w1 = w0 - 学习率 * w对loss的偏微分
    b1 = b0 - 学习率 * b对loss的偏微分
    通过不断的更新就可以找到loss相对比较小的值。
    在这里插入图片描述
    下图就是以上内容的图像表达:
    在这里插入图片描述
    每个点的微分方向就是所在点切线的法线上

    • 如果数据和下图那么就会出现两个不一样的"最优值"。
      在这里插入图片描述
      我们通过𝜕𝐿/𝜕𝑤 and Τ𝜕/𝜕𝑏来进行查看
      在这里插入图片描述
      通过微分的计算可以得到我们想要的结果。

    结果展示

    通过loss获取最好的结果得到数据然后进行还原以后得到了下图:
    在这里插入图片描述
    y = 2.7 * x -188.4

    以上结果可以看出来数据没有完全预测得到我们想要的结果。
    我们可以计算error的值来对计算的优劣成果进行评价
    error的值等于每个点到预测线的距离的平均值

    我们这个误差值是否具有代表性?结果是不一定!

    我们需要找到其他的未经过测试的结果来进一步的预测。

    通过比较两个error之间的值来比较模型的优劣。

    模型调整

    上面的数据对最后的结果并不满意需要进一步的提高 就要对原本的模型进行调整。

    • 改成二元二次方程。
      y = b + w1 * xcp + w2 * (xcp) ^2
      在这里插入图片描述
      通过新的模型进行学习实际的结果可以证明新的模型效果比旧的好。
      在这里插入图片描述
      error 的值也进一步得到了提高

    • 改成二元三次方程。
      y = b + w1 * xcp + w2 * (xcp) ^2 + w3 * (xcp)^3
      在这里插入图片描述
      在这里插入图片描述
      结果虽然和第二个模型相差不大,但是也是有一定的效果的。

    • 改成二元四次方程。
      y = b + w1 * xcp + w2 * (xcp) ^2 + w3 * (xcp)^3 + w4 * (xcp)^4
      在这里插入图片描述
      在这里插入图片描述

    • 继续使用更复杂的模型。

    在这里插入图片描述
    通过最后两个模型的比较发现数据变得更差的error的预测值更加的糟糕了。

    过拟合

    在这里插入图片描述
    越复杂的模型最后的效果反而 更加的差了。
    这种现象叫做过拟合
    在这里插入图片描述

    过拟合:就是类似于老师上课把期末考试的卷子一直重复,你可以把试卷倒背如流,期末考试考的一定是满分或者非常高的分数,但是不巧,试卷换了,最后用的卷子和你平时背的完全不一样,最后成绩特别差,这种情况就是过拟合。

    模型过于复杂并不是一件好事情,说不定效果会更差。需要找一个合适的模型。

    丝滑的loss

    当模型比较复杂时loss的计算方式会影响最后取的最优解的值。如果让loss稍微平滑一点,没有那么大的波动,说不定就不会跳过那个属于他的 真命天子了。
    在这里插入图片描述
    通过添加后面那个值可以一点程度上修改loss莽撞的性格,使得他更加的平滑和委婉。
    在这里插入图片描述
    使用了平滑器wi越小越接近于0,他减缓的速度就会越慢。越来越平滑。
    这样子的数据相对来说受到的干扰会更小,不会因为一些没有用的内容而受到较大的干扰。
    在这里插入图片描述
    根据实际的情况进行测试以后发现,这种平滑器是比较有效果的是,但是对于的值在合理范围不能够太大,当值过大以后就越考虑输入的w本来的值减少考虑error的值。不利于接下去对其他数据的预测。

    项目解析(宝可梦训练师版本)

    # 导入第三方库
    import numpy as np 
    import matplotlib.pyplot as plt
    
    # 定义初始数据
    x_data = [338., 333., 328., 207., 226., 25., 179., 60., 208., 606.]
    y_data = [640., 633., 619., 393., 428., 27., 193., 66., 226., 1591.]
    # ydata = b+w * xdata
    
    x = np.arange(-200,-100,1)  # 偏差
    y = np.arange(-5, 5, 0.1)  # 权重
    # print(x[:10],y[:10])  # 查看数据
    z = np.zeros((len(x), len(y)))  # 创建空数组,大小是(len(x),len(y))
    X, Y = np.meshgrid(x, y)
    # print(x.shape)
    

    x, y = np.meshgrid(x, y):两组数值生成相同的维度。 看下图自己理解一下
    在这里插入图片描述

    a = np.array([0, 1, 2])
    b = np.array([0, 1])
    A, B = np.meshgrid(a, b)
    print(A)
    print(B)
    

    [[0 1 2]
    [0 1 2]]
    [[0 0 0]
    [1 1 1]]

    for i in range(len(x)):  # 循环len(x)次
        for j in range(len(y)):
            b = x[i]  # b = 遍历的x
            w = y[j]
            z[j][i] = 0
            for n in range(len(x_data)):
                z[j][i] = z[j][i] + (y_data[n] - b - w*x_data[n])**2
                
            z[j][i] = z[j][i]/len(x_data) 
    # print(z.shape)
    
    b = -120  # 初始值
    w = -4  # 初始值
    lr = 0.0000001  # 学习率
    itration = 100000  # 学习次数
    
    # 存储绘图的初始化
    b_history = [b]
    w_history = [w]
    
    # 计算各点b和w的偏微分
    for i in range(itration):
        b_grad = 0.0
        w_grad = 0.0
        for n in range(len(x_data)):
            b_grad = b_grad - 0.2*(y_data[n] - b - w*x_data[n])*1.0
            w_grad = w_grad - 0.2*(y_data[n] - b - w*x_data[n])*x_data[n]
        # 更新参数
        b = b - lr * b_grad
        w = w - lr * w_grad
        # 存储绘图参数
        b_history.append(b)
        w_history.append(w)
    
    plt.contourf(x,y,z,50,alpha=0.5, cmap=plt.get_cmap('jet'))
    #坐标:[-188.4],[2.67],color:线条颜色
    plt.plot([-188.4],[2.67],'x', ms=12, markeredgewidth=3, color='orange')
    plt.plot(b_history,w_history,'o-', ms=3, lw=1.5, color='black')
    plt.xlim(-200,-100)
    plt.ylim(-5,5)
    #设置横纵坐标的名称以及对应字体格式
    plt.xlabel(r'$b$', fontsize =16)
    plt.ylabel(r'$w$', fontsize =16)
    

    Text(0,0.5,’ w w w’)
    在这里插入图片描述

    误差的由来

    在上面的学习中,我们已经知道了并不是模型越好效果就越好,还是要在一定的程度上才可以。

    我们预测的值和实际的预期的值是有差距的。

    在这里插入图片描述
    模型训练后我们预期的值是f^但是预测结束以后得到的结果却是f*,里面有一定的距离差。
    这个差距的由来可能来自两个原因:biasvarance

    最后的结果不一定与预期值相同,但是会散落在预期值周围。
    在这里插入图片描述
    但我们对bias(偏差)进行计算以后可以 得到离散的程度。
    他和数据的样本量有关系。样本量越多离散程度越低,样本量越高离散程度越高。

    然后对varance (方差)进行计算。
    在这里插入图片描述

    varance对结果的影响

    他的误差可能是结果没有取好,类似于打靶没有瞄准靶心,也就是效果 不是非常的模型,还有可能就是模型的方差很大,比较离散,没有聚拢。

    当模型比较简单是varance值是比较小的,当模型复杂以后varance会散布的更加的开。

    模型越复杂都到data的影响就越多,最后的结果也越多。

    类似于在室内打靶收到的影响只有自己的发挥和器械的精度,相对应只有两个变量。但是在室外,涉及到风速、空气湿度,光线 折射度、距离……因素影响,最后的效果偏差肯定也是比较大的。

    bias对结果的影像

    bias越小说明离散程度越高,当模型简单时bais是比较大的。当模型复杂以后最后的bais会比较小。

    bias类似于套圈圈的游戏,你的模型比较简单,谁然比较集中的投掷某一个物品,但是由于各种偏差,能够投中的概率还是很低的,如果力道不对偏差的位置多那么输入集中但是距离既定目标还是很远的。
    如果大量的数据分开来会散落在既定目标周边,那么大家平均以后的结果就会越接近我们的目标值,说不定还会有意外收获。

    欠拟合与过拟合

    • 如果你的模型甚至不能适应训练的例子,那么你就有很大的偏差(欠拟合
    • 如果你能拟合训练数据,但测试数据误差很大,那么你可能有很大的方差(过拟合

    对于欠拟合,重新设计你的模型:
    • 添加更多的功能作为输入
    • 一个更复杂的模型

    对于过拟合,增加我们的data
    方法一:这个办法不是万能的,但是是一个不错的选择。
    如果data数量有限,可以适当的使用数据增强(增广)
    方法二:使用正则化,使得数据 更加的平滑。
    对应的bias会受到影响。


    回归的内容就到这里了!

    参考资料:
    李宏毅老师课程-机器学习
    李宏毅课程笔记(一)——回归演示demo(super松·著)
    机器学习回归之路项目


    作者简介

    作者:三岁
    经历:自学python,现在混迹于paddle社区,希望和大家一起从基础走起,一起学习Paddle
    csdn地址:https://blog.csdn.net/weixin_45623093/article/list/3
    我在AI Studio上获得钻石等级,点亮7个徽章,来互关呀~ https://aistudio.baidu.com/aistudio/personalcenter/thirdview/284366

    传说中的飞桨社区最菜代码人,让我们一起努力!
    记住:三岁出品必是精品 (不要脸系列

    展开全文
  • 基于机器学习的车牌识别系统 概要 本文基于机器学习的车牌识别系统的工作主要是运用SVM算法实现了对车牌的识别,支持上传本地图片和调用摄像头进行拍摄两种识别的途径。并用tkinter做了一个客户端界面。 该算法主要...

    基于机器学习SVM的车牌识别系统

    概要

    本文基于机器学习的车牌识别系统的工作主要是运用SVM算法实现了对车牌的识别,支持上传本地图片和调用摄像头进行拍摄两种识别的途径。并用tkinter做了一个客户端界面。
    该算法主要的思想是先使用图像边缘和车牌颜色定位车牌,再用SVM算法识别字符。车牌定位在predict方法中,为说明清楚,完成代码和测试后,加了很多注释,请参看源码。车牌字符识别也在predict方法中,请参看源码中的注释,需要说明的是,车牌字符识别使用的算法是opencv的SVM, opencv的SVM使用代码来自于opencv附带的sample,StatModel类和SVM类都是sample中的代码。SVM训练使用的训练样本来自于github上的EasyPR的c++版本。源码中,上传了EasyPR中的训练样本,在train\目录下,如果要重新训练请解压在当前目录下,并删除原始训练数据文件svm.dat和svmchinese.dat。
    在这里插入图片描述

    • 下载源码,并安装python、numpy、opencv的python版、PIL,运行surface.py即可,包括算法和客户端界面,是其中的2个文件,surface.py是界面代码,predict.py是算法代码,界面用tkinter进行编写。

    运行的一些结果

    一个版本是界面用python的qt界面做的

    在这里插入图片描述
    在这里插入图片描述

    另一个版本是界面是用tkinter做的

    在这里插入图片描述
    在这里插入图片描述

    关键代码

            #以上为车牌定位
    		#以下为识别车牌中的字符
    		predict_result = []
    		roi = None
    		card_color = None
    		for i, color in enumerate(colors):
    			if color in ("blue", "yello", "green"):
    				card_img = card_imgs[i]
    				gray_img = cv2.cvtColor(card_img, cv2.COLOR_BGR2GRAY)
    				#黄、绿车牌字符比背景暗、与蓝车牌刚好相反,所以黄、绿车牌需要反向
    				if color == "green" or color == "yello":
    					gray_img = cv2.bitwise_not(gray_img)
    				ret, gray_img = cv2.threshold(gray_img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    				#查找水平直方图波峰
    				x_histogram  = np.sum(gray_img, axis=1)
    				x_min = np.min(x_histogram)
    				x_average = np.sum(x_histogram)/x_histogram.shape[0]
    				x_threshold = (x_min + x_average)/2
    				wave_peaks = find_waves(x_threshold, x_histogram)
    				if len(wave_peaks) == 0:
    					print("peak less 0:")
    					continue
    				#认为水平方向,最大的波峰为车牌区域
    				wave = max(wave_peaks, key=lambda x:x[1]-x[0])
    				gray_img = gray_img[wave[0]:wave[1]]
    				#查找垂直直方图波峰
    				row_num, col_num= gray_img.shape[:2]
    				#去掉车牌上下边缘1个像素,避免白边影响阈值判断
    				gray_img = gray_img[1:row_num-1]
    				y_histogram = np.sum(gray_img, axis=0)
    				y_min = np.min(y_histogram)
    				y_average = np.sum(y_histogram)/y_histogram.shape[0]
    				y_threshold = (y_min + y_average)/5#U和0要求阈值偏小,否则U和0会被分成两半
    
    				wave_peaks = find_waves(y_threshold, y_histogram)
    
    				#for wave in wave_peaks:
    				#	cv2.line(card_img, pt1=(wave[0], 5), pt2=(wave[1], 5), color=(0, 0, 255), thickness=2) 
    				#车牌字符数应大于6
    				if len(wave_peaks) <= 6:
    					print("peak less 1:", len(wave_peaks))
    					continue
    				
    				wave = max(wave_peaks, key=lambda x:x[1]-x[0])
    				max_wave_dis = wave[1] - wave[0]
    				#判断是否是左侧车牌边缘
    				if wave_peaks[0][1] - wave_peaks[0][0] < max_wave_dis/3 and wave_peaks[0][0] == 0:
    					wave_peaks.pop(0)
    				
    				#组合分离汉字
    				cur_dis = 0
    				for i,wave in enumerate(wave_peaks):
    					if wave[1] - wave[0] + cur_dis > max_wave_dis * 0.6:
    						break
    					else:
    						cur_dis += wave[1] - wave[0]
    				if i > 0:
    					wave = (wave_peaks[0][0], wave_peaks[i][1])
    					wave_peaks = wave_peaks[i+1:]
    					wave_peaks.insert(0, wave)
    				
    				#去除车牌上的分隔点
    				point = wave_peaks[2]
    				if point[1] - point[0] < max_wave_dis/3:
    					point_img = gray_img[:,point[0]:point[1]]
    					if np.mean(point_img) < 255/5:
    						wave_peaks.pop(2)
    				
    				if len(wave_peaks) <= 6:
    					print("peak less 2:", len(wave_peaks))
    					continue
    				part_cards = seperate_card(gray_img, wave_peaks)
    				for i, part_card in enumerate(part_cards):
    					#可能是固定车牌的铆钉
    					if np.mean(part_card) < 255/5:
    						print("a point")
    						continue
    					part_card_old = part_card
    					#w = abs(part_card.shape[1] - SZ)//2
    					w = part_card.shape[1] // 3
    					part_card = cv2.copyMakeBorder(part_card, 0, 0, w, w, cv2.BORDER_CONSTANT, value = [0,0,0])
    					part_card = cv2.resize(part_card, (SZ, SZ), interpolation=cv2.INTER_AREA)
    					#cv2.imshow("part", part_card_old)
    					#cv2.waitKey(0)
    					#cv2.imwrite("u.jpg", part_card)
    					#part_card = deskew(part_card)
    					part_card = preprocess_hog([part_card])
    					if i == 0:
    						resp = self.modelchinese.predict(part_card)
    						charactor = provinces[int(resp[0]) - PROVINCE_START]
    					else:
    						resp = self.model.predict(part_card)
    						charactor = chr(resp[0])
    					#判断最后一个数是否是车牌边缘,假设车牌边缘被认为是1
    					if charactor == "1" and i == len(part_cards)-1:
    						if part_card_old.shape[0]/part_card_old.shape[1] >= 8:#1太细,认为是边缘
    							print(part_card_old.shape)
    							continue
    					predict_result.append(charactor)
    				roi = card_img
    				card_color = color
    				break
    				
    		return predict_result, roi, card_color#识别到的字符、定位的车牌图像、车牌颜色
    
    展开全文
  • 利用Python数据挖掘和机器学习的概述前言:本文主要描述了使用Python进行数据挖掘业务的优势并介绍了相关的数据处理工具包pandas和机器学习算法库scikit-learn。为什么使用python进行数据分析?对很多人来说,Python...

    利用Python数据挖掘和机器学习的概述

    前言:

    本文主要描述了使用Python进行数据挖掘业务的优势并介绍了相关的数据处理工具包pandas和机器学习算法库scikit-learn。

    为什么使用python进行数据分析?

    对很多人来说,Python是一种很容易让人喜爱的语言,自从1991年Python创始以来, Python已经是最受欢迎的动态编程语言之一,其他的类似语言还有Perl,Ruby等等,Python和Ruby变的特别流行是因为他们拥有庞大的网页框架,例如Django(Python),可以方便的搭建网站,这些语言被称为“脚本语言”因为他们经常被用来做一些短小精悍的程序和编写脚本,与底层语言C/C++搭配可以发挥很大的作用。我不喜欢“脚本语言”这个叫法,因为这种叫法包含着这些语言无法胜任任务指向性的软件的意味。在解释执行语言当中,Python以其强大而活跃的科学计算社区而著称,最近几年,Python科学计算方面的功能在工业界和科学研究界中的应用显著增长。

    在数据分析和交互,以及数据挖掘和可视化方面,Python不可避免的被拿来与其他一些主流的广泛使用的开源或商用的编程语言和数据挖掘工具进行比较,例如R(前面几篇文章对R语言进行了调研),MATLAB,SAS,Stata等,最近几年Python在相关的扩展库的帮助下(主要是pandas)已经成为完成数据操控任务强有力的工具,再加上Python相比于其他语言和工具(上述)更加主流的优势,使得python成为了一个用来构建以数据为中心的应用软件的良好选择

    Python作为胶水的优势

    Python的成功有一部分归结于python作为一个科学计算平台而且拥有对C,C++,FORTRAN代码良好的集成上,大多数现代科学计算环境都有一些遗留下来的C,FORTRAN库来计算一些线性代数,最优化,组合数学,快速傅立叶变换等方面的算法,很多企业和国家实验室也利用python来粘合那些已经使用了30多年的遗留软件系统。

    大多数工程代码都是由只占代码量很小一部分却占去大量运行时间的核心代码和占了代码量大部分但运行次数不多的“胶水”代码组成的,通常情况下,胶水代码的运行时间是比较微不足道的,我们通常将努力用在对核心代码的优化上来突破计算速度的瓶颈,

    所以这时候需要讲核心代码转为一些速度较快的底层语言比如说C

    最近,the Cython project已经成为了一种受欢迎的方式来使用python构建可以快速编译和扩展的应用,并且集成了C/C++代码来提升性能。

    解决“两种语言”的问题

    在很多组织当中,有一种相当普遍的情况是在研究,测试新idea,雏形描述时使用一种专注于计算的语言比如说MATLAB或者R然后将这些想法变为一个大的产品系统的一个接口,通常这个产品系统通常是用的C++或者JAVA写的,现在大家发现Python不仅可以用来进行研究和雏形的描述,还可以用来构建实际的生产系统,

    越来越多的企业意识到通过python让技术人员和科研人员使用同一种语言的好处。

    python的缺点

    尽管python是搭建计算指向型应用软件和大部分普通用途的系统的完美环境,但是下面几点python存在短板

    运行速度

    python作为解释执行语言,这一点意味着python代码比同样的用编译型语言写成的代码要慢,比如在一些高频率交易系统中,需要较高的运行速度,这时需要用C++来编写,但是数据挖掘业务当前的构思应用场景例如用户离网和增值业务推荐主要是用SCF生成的数据进行训练然后进行预测,所以对运算速度要求不高。

    并发性

    python并不是一种适合做高并发和多线程应用的语言,原因是python自身的GIL机制,(GIL机制在此处不多描述),但是我们的业务场景并不直接使用python来做多线程,而是利用SCF(C++)具有高并发的特点,可以方便的进行多线程调用python,所以这个缺点在我看来也不造成影响

    并且随着各个开源框架的实现,使用python做并发也不是不可以

    进行数据挖掘工作必要的python库

    Numpy

    Numpy是Numerical Python的缩写,是利用python进行科学计算的最基础的包,包含了实现算法所必需的数据结构

    快速而高效的多维数组对象:ndarry

    提供多种多维数组运算的方法

    对基于多维数组的数据集合读写到硬盘的工具

    线性代数运算符,傅立叶变换,随机数生成

    将C/C++,FORTRAN代码集成到python中的工具

    Numpy除了提供给python快速计算多维数组(矩阵)运算能力,多维数组还有一个主要用途是用来做在算法间传递数据的容器,对数值型数据来说,Numpy的多位数组在存储和计算数据时是一种比其他python内置类型有效很多的方式,而且,用底层语言写成的库,比如C或者FORTRAN,可以直接操纵多维数组中的数据。

    pandas

    pandas提供了丰富的数据结构和函数,可以对结构化数据进行快速简易并且易于表达的处理工作,pandas严格的要素使python成为了一种强力并且高产的数据分析环境,经常被使用的pandas主要对象是DataFrame(数据框)——一种二维表,拥有行列标签并且按列存储,例如

    ![Data Frame](/Users/wenxiaole/Desktop/QQ20150416-1@2x.png =500x)

    pandas把Numpy在多维数组运算方面良好的表现和对电子表格(xls)和关系型数据库灵活操作特点结合了起来(这一点很重要,因为要对从关系型数据库到处的结果进行直接操纵),pandas提供了复杂精细的索引功能可以进行矩阵的行,列变换,切片,切块,聚合,挑选特定数据子集的操作。

    对于金融行业的用户,pandas提供了大量适用于金融数据的高性能时间序列功能和工具。

    对于使用R语言进行统计计算的用户,肯定不会对DataFrame这个名字感到陌生,

    因为它源自于R的data,frame对象,但是这两对象并不相同,R的data.frame对象所提供的功能只是DataFrame对象所提供的功能的一个子集。

    matplotlib

    matplotlib是最流行的用于绘制数据图表的python库,目前有一个庞大的开发人员团队维护,它非常适合创建出版物上的图标,它跟IPython结合得很好,因而提供了一种非常好用的交互式数据回吐环境,绘制的图标也是交互式的。可以利用绘图窗口的工具栏放大图标中的某个区域或对整个图标进行平移浏览。

    IPython

    IPython是python科学计算标准工具集的组成部分,它将其它所有的东西联系到了一起,它为交互式和探索式计算提供了一个强健而高效的环境,它是一个增强版的python shell,目的是提高编写,测试,调试python代码的速度,它主要用于交互式数据处理和利用matplotlib对数据进行可视化处理。

    除标准的基于终端的IPython shell外,该项目还提供了:

    一个类似于Mathematica的HTML笔记本

    一个基于Qt框架的GUI控制台,其中含有绘图,多行编辑以及语法高亮等功能

    用于交互式并行和分布式计算的基础架构

    SciPy

    SciPy是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:

    scipy.integrate:数值积分和微分方程求解器

    scipy.linalg:扩展了有numpy.linalg提供的线性代数例程和矩阵分解功能

    scipy.optimize:函数优化器以及根查找算法

    scipy.signal:信号处理工具

    scipy.sparse: 稀疏矩阵和稀疏线性系统求解器

    scipy.special:实现了许多数学函数的包装器

    scipy.stats: 标准连续和离散概率分布,各种统计检验方法以及更好的描述统计法

    scipy.weave: 利用内联C++代码加速数组计算的工具

    NumPy和SciPy的有机结合完全可以替代MATLAB的计算功能

    scikit-learn

    scikit-learn是一个强大的基于python的机器学习数据挖掘算法库,封装了基本所有主流的机器学习算法并且使用起来规整方便。开源并且可供商业应用,它依赖于NumPy,SciPy,matplotlib,基于BSD开源许可证,这个项目最早由DavidCournapeau在2007年发起的,目前也是由很多活跃的社区自愿者进行维护,并且拥有谷歌的经费。

    scikit-learn在工业界已经被很多有数据挖掘需求的企业所采纳,下面这些企业已经在他们的数据挖掘业务中使用scikit-learn,其中有电信企业,业务场景与我们的类似

    scikit-learn的基本功能主要被分为六个部分,分类,回归,聚类,数据降维,模型选择,数据预处理,具体可以参考官方网站上的文档。

    展开全文
  • 机器学习》——鸢尾花学习小结 前言 **已知:**一组鸢尾花数据:花瓣的长度x1,宽度x2,花萼的长度x3和宽度x4以及鸢尾花的品种Y。 **目标:**通过机器学习算法对已知x1,x2,x3,x4数值的鸢尾花品种进行分类。 部分...
  • 机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统代码和课设报告的连接: 摘要 本文手写体数字识别系统的工作主要是运用K最邻近算法实现了对手写体数字的识别,支持上传本地图片和调用摄像头进行拍摄并...
  • 算是对自己学习web以来的转化实践吧。 代码地址米其林餐厅数据挖掘管理系统 具体都在README.md中说的很清楚。寒假有时间大概会增加一些内容,目前的登录只进行了简单的用户名及密码匹配,没有权限控制,后面可能会用...
  • 本文为吴恩达机器学习课程的笔记系列第三篇,主要关于机器学习应用时如何诊断偏差和方差,从而对机器学习系统实施相应的解决方法,以及介绍设计机器学习系统时的设计方法与评价指标。
  • 3) 泛化能力:所谓泛化能力是指在设计模式分类器时,即要考虑网络在保证对所需分类对象进行正确分类,还要关心网络在经过训练后,能否对未见过的模式或有噪声污染的模式,进行正确的分类。也即BP神经网络具有将学习...
  • 机器学习项目实战系列 机器学习预测股价 目录 机器学习项目实战系列 机器学习预测股价 一、概述 二、分析数据 1.导入 2.数据导入 3.分析股票尾市数据 4.构建模型 5.测试模型 6.展示预测结果 一、概述 ...
  • 这一章将介绍一种机器学习的应用实例:照片OCR技术,介绍它的原因: (1)首先,展示一个复杂的机器学习系统是如何被组合起来的; (2)接着,介绍一下机器学习流水线的有关概念以及如何分配资源来对下一步计划作出...
  • 1)n_estimators 利用学习曲线观察n_estimators在什么取值开始变得平稳,是否一直推动模型整体准确率的上升等信息,第一次的学习曲线,先用来帮助划定范围,取每十个数作为一个阶段,来观察n_estimators的变化如何...
  • 1 分类步骤 第一步,将要分类的东西数字化,使其可以做函式的输入。 第二步,找到理想的分类...上图中利用δ\deltaδ函数设计Loss function,可以训练,但是因为离散的原因,L(f)不可微分,下面介绍一个新解决办法 ...
  • 什么是机器学习? 人工智慧(目标):简单的定义,就是让机器拥有学习的能力。而其中的机器学习,就是实现人工智慧的手段;深度学习,则是机器学习的其中一种方法。 对于一款智能产品(比如聊天机器人),假设采用...
  • 机器学习入门要学习什么内容呢?

    千次阅读 2021-07-19 17:00:58
    随着人工智能的发展,从事机器学习、数据挖掘等相关工作,包括推荐算法工程师、数据挖掘工程师、机器学习工程师,填补人工智能领域人才稀缺就业前景非常好,因此学习机器学习的人越来越多。不过这一方面的要求也很高...
  • 我是黄海广,是温州大学的老师,一直有支持Datawhale。我上的一门叫《机器学习》,本科生学机器学习有点难,但也不是没有可能,我在摸索中,设计适合本科生的机器学习课程,写了教材,录了视...
  • 机器学习期末考试

    万次阅读 多人点赞 2021-06-05 00:28:12
    机器学习期末考试 一、机器学习链接 1、机器学习期末复习试卷_zhouyan2000的博客-CSDN博客_机器学习期末考试} 2、[机器学习笔试题]((4条消息) 机器学习笔试题目_北冥有小鱼-CSDN博客_机器学习题目) 3、机器学习面试...
  • 这学期我给研一同学上机器学习课,接下来,我会陆续分享下我上课用的的课件。下载地址:https://github.com/fengdu78/WZU-machine-learning-cour...
  • 自动化机器学习(AutoML)可以帮助机器学习管道中的某些关键组件实现自动化。其中机器学习管道包括数据理解、数据工程、特征工程、模型训练、超参数调整、模型监控等。在这篇文章中,我将分享 8...
  • 下面的课程的的数学性可能不是那么强,但是我认为我们将要讲到的这些东西是非常有用的,可能在构建大型的机器学习系统时,节省大量的时间。 本周以一个垃圾邮件分类器算法为例进行讨论。 为了解决这样一个问题,
  • 整个机器学习入门框架以及机器学习预测股票市场例子-笔记海纳百川版 平时我们买股票的时候通常是看看他的各种参数指数,通常有各种指数去参考分析。同时各种K线无非也是各种数据的可视化,最后还是回归在数据身上。...
  • 机器学习项目实战系列 鸢尾花 一、环境准备 1.安装Python3 2.安装好anaconda 3.安装好相应的库 Numpy:用于 Python 的数值处理,最常用的一个库 PIL:一个简单的图像处理库 scikit-learn:包含多种机器学习...
  • 1、搭建一个机器学习模型 2、机器学习开发实例:明确任务背景与目标 3、制作数据集 4、特征工程 5、模型训练 6、总结与拓展 1、搭建一个机器学习模型 人工设计特征:在实际的应用中,特征往往比模型本身更...
  • 点上方蓝字人工智能算法与Python大数据获取更多干货在右上方···为星标★,第一时间获取资源仅做学术分享,如有侵权,联系删除负责 | 王佳旭、金一鸣成员 | 黑桃、李威、 排骨、...
  • 机器学习,是指机器拥有人类一般的学习能力,拥有自我更新和适应并从堆积如山的数据中寻找出有用知识的能力。是计算机通过数学原理、逻辑关系、海量数据等有机结合的算法来模拟人类生活中学习的过程,最后得出模型对...
  • 【导读】:全面介绍机器学习发展的历史,从感知机、神经网络、决策树、SVM、Adaboost到随机森林、Deep Learning。 自科学技术和人工智能最初发展开始,科学家Blaise Pascal和Von Leibniz就思考着如何制造一台像...
  • 按照学习的一种分类方法,可以将学习分为演绎学习和归纳学习。 演绎学习是指从某些基础的抽象的概念开始推到出的具体的知识。例如在数学中从给定的公理和定理出发,推到出能说明具体实例的知识。 与之对应的归纳学习...
  • kNN(k-Nearest Neighbors,k近邻)是机器学习中非常基础的一种算法,算法原理简单而且容易实现,结果精度高,无需估计参数,无需训练模型,而且不仅可以用于分类任务,还可以应用到回归问题。作为开始学习机器学习...
  • 机器学习:计算机无需专门编程即可从经验中学习。” 最近这十年以来,人工智能和机器学习已经获得了广泛的关注,每个人都希望成为这一变化的一部分。企业希望掌握该技术的优势,而专业人士则对机器学习的强大能力...
  • 机器学习知识点总结(待更新)

    千次阅读 2021-04-11 16:37:45
    机器学习按照模型类型分为监督学习模型、无监督学习模型和概率模型三大类,文章对十大机器学习算法进行详细介绍并阐述机器学习其他概念问题,可作为机器学习初学者学习使用。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,601
精华内容 33,840
关键字:

机器学习课程设计报告