继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【学习打卡】第6天 Python3入门机器学习

黄义舜
关注TA
已关注
手记 36
粉丝 4
获赞 32

课程介绍


课程名称:Python3入门机器学习 经典算法与应用 入行人工智能 课程章节: 3-11; 3-12;4-1 主讲老师:liuyubobobo

今日主要内容导读:

  • 第一部分:Matplotlib基础
  • 第二部分:数据加载和简单的数据探索
  • 第三部分:knn-k近邻算法基础

课程详细


第一部分:Matplotlib基础

import matplotlib as mpl
import matplotlib.pyplot as plt

#先创建100个x0-10之间地等差数列,
import numpy as np
x = np.linspace(0, 10, 30)
y = np.sin(x)

#设x为x轴,y为y轴,将点与点用直线相连,点越密,图像越平滑
#他会在你使用plt.show()之前,创造函数调整参数,
#最后plt.show()一下显示
plt.plot(x, y)
plt.show()

图片描述

#那么一个图上能出现两个曲线吗?
#先设置两个条曲线地y值
cosy = np.cos(x)
siny = y.copy()

#color 两条线能智能地用不一样的颜色来标记,你想自己定地话,改变color参数
#linestyle 两条线默认为实线,还有:虚线;-.虚线;--虚线;-实线四种
plt.plot(x,siny)
plt.plot(x,cosy,color='red',linestyle=':')
plt.show()

图片描述

#他会自动识别坐标系,比如x在0-10,x坐标系就在0-10,y页同理
#想要修改地话,可以这样
plt.plot(x,siny)
plt.plot(x,cosy,color='red',linestyle=':')
plt.xlim(-5,15)
plt.ylim(0,1)
#想要同时调整的话可以
plt.axis([-5,15,0,1])
#传入一个列表,开头两个是x地坐标范围,后面两个是y地范围
plt.show()

图片描述

#如何对x,y轴的坐标,线条名称的名称,标题进行设置呢?
#label 设置线条的时候直接在参数名中设置
plt.plot(x,siny,label = 'sin')
plt.plot(x,cosy,label = 'cos')
#对x名称进行调整
plt.xlabel('x axis')
#对y名称进行调整
plt.ylabel('y value')
#对标题进行设置
plt.title('hello world!')
plt.show()

图片描述

绘制散点图

plt.scatter(x, siny)
plt.scatter(x,cosy,label='cos')
plt.show()

图片描述

#正态分布,
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)

#alpha 不透明度
plt.scatter(x, y, alpha=0.5)
plt.show()

图片描述

第二部分:数据加载和简单的数据探索

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

#如何从数据库中加载数据,并进行简单的操作呢
from sklearn import datasets

#这是个鸢尾花的数据,可以看成是字典
iris = datasets.load_iris()

#查看字典的键,也就是特征
iris.keys()
#data 数据量
#target 种类吧
#feature_names x特征量
#filename 文件名
#dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', #'feature_names', 'filename', 'data_module'])

#载入数据文件
X = iris.data

#
plt.scatter(X[:,0],X[:,1])
plt.show()

图片描述

#载入花朵分类,0,1,2
y = iris.target

#marker 对于散点图,点的样式如何转换 marker='o';+,v,<,>,1,2,3很多可以都去试试
plt.scatter(X[y==0,0],X[y==0,1], color='red',marker='o')
plt.scatter(X[y==1,0],X[y==1,1], color='blue',marker='+')
plt.scatter(X[y==2,0],X[y==2,1], color='green',marker='x')
#假如你自己现在就是一个机器人,你要分来来三种花的种类,红点似乎很好区分,
#但是绿点和蓝点似乎就比较难了,但是只选取了两个维度,
plt.show()

图片描述

#第三第四维度特征
plt.scatter(X[y==0,2],X[y==0,3], color='red',marker='o')
plt.scatter(X[y==1,2],X[y==1,3], color='blue',marker='+')
plt.scatter(X[y==2,2],X[y==2,3], color='green',marker='x')

plt.show()

图片描述

第三部分:knn-k近邻算法基础

加入新来了一个x点 在离散点中找到k个离x点最近的点,假如最近的为0的多,判断x=0 反之为1

import numpy as np
import matplotlib.pyplot as plt

X_train = np.array(raw_data_X)
y_train = np.array(raw_data_y)

plt.scatter(X_train[y_train==0,0],X_train[y_train==0,1])
plt.scatter(X_train[y_train==1,0],X_train[y_train==1,1])
plt.show()

图片描述

X_train[y_train==0,0]
#含义为,找到X_train中下标为(满足y_train==0)的第1列

#一个新输入的点,判断是不是有肿瘤
x = np.array([8.093607318, 3.365731514])

plt.scatter(X_train[y_train==0,0],X_train[y_train==0,1])
plt.scatter(X_train[y_train==1,0],X_train[y_train==1,1])
plt.scatter(x[0],x[1])
plt.show()
#从图中很好地看出新的点属于y_train==1
#那么使用knn算法是怎么样用的呢

图片描述

KNN的过程详解

#先创建距离的列表
from math import sqrt
distances = [ ]
t=1
for x_train in X_train:
    #拿出一行数据减去x点,计算他的欧拉距离
    d = sqrt(np.sum((x_train - x)**2))

#for循环相当于下面这个
distances = [sqrt(np.sum((x_train - x)**2)) for x_train in X_train ]
#输出一个排序好的下标的数列
nearst=np.argsort(distances)    

#knn找6个最近的数
k=6

#最近的k个点的y的坐标
topK_y = [y_train[i] for i in nearst[:k]]

#获得了离x点最近的k个点所代表的y_train的值
#然后数一下
topK_y——》[1, 1, 1, 1, 1, 0]

#找一下元素中出现的数字和次数
from collections import Counter
Counter(topK_y)
#Counter({1: 5, 0: 1})

votes = Counter(topK_y)

#利用这个函数找出,找出票数最多的一个函数
votes.most_common(1)
#返回一个数组  [(1, 5)]

#预测的y的值,预测肿瘤为恶行肿瘤
predict_y = votes.most_common(1)[0][0]
predict_y

课程思考


>今天学习了,Matplotlib绘图,一个字cool,很炫酷的绘图,还学习了我在liuyubobobo老师这儿学习的第一个机器学习算法,KNN算法,通过输入k值来找出输入点距离边上最近的历史数据的值的距离。但我觉得有些缺点,应为数据一旦大了,运算很慢,每一个点输入,他们要把数据全部算一便,我觉得有缺陷,总结来说:伴随着x的输入每次都要遍历全样本来计算预测x的值,太耗资源了。不过算法实现简单明了

课程截图


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP