机器学习(一) 数据可视化

机器学习(一) 数据可视化

前言:

1.开发环境:Anaconda3-5.2.0,点击这里下载所有版本

2.语言:python

机器学习是一个很大的概念,我会的也是其中的沧海一粟,我从基础的开始和大家一起分享一下学习心得。

为什么不先说别的,要先说数据可视化?

从日常工作中,机器学习的成果怎么展示?

有的是润物细无声系列,比如说Facebook的反爬虫策略就使用的机器学习分析用户行为,来判别你是正常的用户还是别人写的代码,你根本就感知不到。

但是很多情况下,机器学习处理后的结果还是需要通过直观的图表展示,当然这里还是对你python基础的再次熟悉。

1. matplotlib

如果想做简单的图形展示,比如说条形图、线图、散点图、直方图这些可以使用应用最广泛的matplotlib库。

因为matplotlib对中文支持不好,因此在开始前,需要安装一种中文字体。我这里添加的是黑体,当然你可以按照你的喜好添加其他中文字体,点击这里下载 (如果在这之前你使用过matplotlib,但是没有使用过中文字体,那么你可以将缓存删除,缓存是在/XX/XX/.matplotlib,将这个缓存文件夹删除。)

将下载好的字体放到/anaconda3/lib/python3.6/site-packages/matplotlib/mpl-data/fonts/ttf这个文件夹中。

这里使用anaconda中的jupyter notebook来进行代码和图表的交互。可以在shell界面,直接输入jupyter notebook就可以打开。

MacBook-Pro:data_analysis duke$ jupyter notebook

机器学习(一)  数据可视化如果对jupyter notebook的快捷键不知道如何使用,点击这里

展示某种趋势可以使用线图,例中国从1967年至2017年的GDP,代码如下:

from matplotlib import pyplot as plt
years = [1967,1977,1987,1997,2007,2017]
gdp = [728.82,1749.38,2729.73,9616.04,35521.82,122377.00]
#指定中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']

#创建一份线图,x轴是年份,y轴是gdp
plt.plot(years,gdp,color='red',marker='o',linestyle='solid')

#添加一个标题
plt.title("中国名义GDP")

#给y轴加标记
plt.ylabel("亿美元")
plt.show()

结果如下:
机器学习(一)  数据可视化

2.1 条形图

展示某些离散的项目的集合的数量变化,可以使用条形图。

2019年奥斯卡金像奖获奖情况

movies = ['绿皮书','罗马','波西米亚狂想曲','宠儿','假若比尔街能说话','黑豹']
num_oscars = [3,3,4,1,1,3]

# 条形的默认宽度是0.8,因此我们对左侧坐标加上0.1,这样每个条形就被放置在中心了
xs = [i + 0.1 for i,_ in enumerate(movies)]

#使用左侧坐标[xs]和高度[num_oscars]画条形图
plt.bar(xs,num_oscars)

plt.ylabel("所获奥斯卡金像奖数量")
plt.title("2019年91届奥斯卡")

#使用电影对名字标记x轴,位置在x轴上条形的中心
plt.xticks([i for i,_ in enumerate(movies)],movies)
plt.show()

结果如下:
机器学习(一)  数据可视化
条形图可以用来绘制拥有大量数值取值的变量直方图。

from collections import Counter           # Counter是一个继承了字典的类
grades = [75,0,62,100,95,89,0,55,73,82,85,77,61]
decile = lambda grade : grade//10 *10
histogram = Counter(decile(grade) for grade in grades)

plt.bar([x for x in histogram.keys()],  
        histogram.values(),               # 给每个条形设置正确的高度
        8)                                # 每个条形的宽度设置为8

plt.axis([-5, 105, 0, 5])                 # x轴取值从-5到105,y轴取值0到5

plt.xticks([10 * i for i in range(11)])   # x轴标记为0,10,...,100
plt.ylabel("学生数")
plt.title("考试分数分布图")
plt.show()

结果如下:
机器学习(一)  数据可视化
plt.bar的第三个参数指定来条形的宽度,在这里我们选择宽度为8。

plt.axis调用x轴的范围是-5~105(使"0"到"100"这些条形可以完全显示。)

plt.xticks调用x轴的刻度放在0、10、20、….、100这些位。

2.2 线图

第一个例子就是简单的线图例子,可以用plt.plot()来制作线图。线图可以清楚的展示某种事物的趋势。

variance = [1,2,4,8,16,32,64,128,256]
bias_squared = [256,128,64,32,16,8,4,2,1]
total_error = [x+y for x,y in zip(variance,bias_squared)]
xs = [i for i,_ in enumerate(variance)]

# 可以多次调用plt.plot以便在同一个图上显示多个序列
plt.plot(xs,variance,'g-',label ='variance') # 绿色实线
plt.plot(xs,bias_squared,'r-.',label='bias^2')  #红色点虚线
plt.plot(xs,total_error,'b:',label='total error') # 蓝色点线

# 因为已经对每个序列都指派了标记,所以可以*地布置图例
# loc=9指的是“顶部*”
plt.legend(loc=9)
plt.xlabel("模型负责度")
plt.title("偏差-方差权衡图")
plt.show()

结果如下:
机器学习(一)  数据可视化

2.3 散点图

散点图显示成对数据集的可视化关系是比较好的,例如社交软件用户的朋友数和他们每天花在社交软件上的分钟数之间的关系。

friends = [70,65,72,63,71,64,60,64,67]
minutes = [175,170,205,120,220,130,105,145,190]
labels = ['a','b','c','d','e','f','g','h','i']

plt.scatter(friends,minutes)

#每个点加标记
for label,friend_count,minute_count in zip(labels,friends,minutes):
    plt.annotate(label,
                 xy=(friend_count,minute_count), # 把标记放在对应的点上
                 xytext=(5,-5),                  # 但要有轻微偏离
                 textcoords='offset points')
plt.title("日分钟数与朋友数")
plt.xlabel("朋友数")
plt.ylabel("花在网站上的日分钟数")
plt.show()

结果如下:
机器学习(一)  数据可视化
以上对于入门可视化已经够了,接下来就是机器学习中需要用到的数学知识。

上一篇:20190422 SQL SERVER 服务


下一篇:Tensorflow实现分类