机器学习(matplotlib、numpy的使用介绍)

机器学习

人工智能发展必备三要素 :

数据
算法
计算力
人工智能和机器学习、深度学习的关系:
机器学习是人工智能的一个实现途径
深度学习是机器学习的一个方法发展而来
人工智能主要分支 :
计算机视觉
语音识别
文本挖掘分类
机器翻译
机器人
机器学习工作流程总结:
获取数据
数据基本处理
特征工程
机器学习
模型评估
数据集介绍:
数据集中一行数据称为一个样本,一列数据成为一个特征
数据集的构成:
由特征值+目标值构成
数据集分为训练数据和测试数据
机器学习算法分类:
##### 监督学习
    输入数据由输入特征值和目标值组成
    函数的输出可以是一个连续的值或是有限个离散值
##### 无监督学习
    输入数据由特征值组成,没有目标值
    输入数据没有被标记,没有确定的结果,样本数据类别未知,需要根据样本间的相似性         对样本集进行类别划分
##### 半监督学习
    训练集同时包含由标记样本数据和未标记样本数据
##### 强化学习
    自动进行决策,可以做连续决策
    强化学习的目标就是获得最多的累计奖励
模型评估:
##### 分类模型评估
    准确率为预测正确的数占样本总数的比例
##### 回归模型评估
    利用均方根误差评估
##### 拟合
    欠拟合:模型学习的太过粗糙,训练集中的样本数据特征没有学到
    过拟合:所建的学习模型或者是深度学习在训练样本中表现得过于优越,导致在测试数               据集中表现不佳。

matplotlib的使用

#导入matplotlib库
import matplotlib.pyplot as plt
​
# 绘制画布
plt.figure(figsize=(10, 10), dpi=100)   #figure指定图的长宽,dpi图像的清晰度
​
# 绘制折线图
plt.plot([1 ,2, 3, 4, 5, 6, 7],[16, 17, 18, 15, 11, 11, 13])    #分别代表X,Y
​
plt.grid(True,linestyle='--',alpha=0.5)  #创建网格
​
plt.show() #显示画布
​

#导入matplotlib库
import matplotlib.pyplot as plt
import random
​
#设置显示中文字体
mpl.rcParams["font.sans-serif"]=["SimHei"]
#设置正常显示符号
mpl.rcParams["axes.unicode_minus"]=False
​
#画出温度变化图
​
#准备x,y坐标的数据
x=range(60)
y_shanghai=[random.uniform(15,18)for i in x]
​
#创建画布
plt.figure(figsize=(20,10),dpi=80)
​
# 添加x轴,y轴描述信息及标题
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点0分到12点之间的温度变化图示",fontsize=20)
​
#绘制折线图
plt.plot(x,y_shanghai)
​
# # 保存图片
# plt.savefig("保存路径")
​
#显示图像
plt.show()

# 在一个坐标系中绘制多个图像
​
#导入matplotlib库
import matplotlib.pyplot as plt
import random
​
x=range(60)
y_beijing=[random.uniform(10,4)for i in x]
​
#绘制折线图
plt.plot(x,y_shanghai)
​
#使用多次plot可以画多个折线
plt.plot(x,y_beijing,color='r',linestyle='--')
​
plt.show()

#导入matplotlib库
import matplotlib.pyplot as plt
import random
​
#设置显示中文字体
mpl.rcParams["font.sans-serif"]=["SimHei"]
#设置正常显示符号
mpl.rcParams["axes.unicode_minus"]=False
​
​
x=range(60)
y_beijing=[random.uniform(10,9)for i in x]
​
#绘制折线图
plt.plot(x,y_shanghai,label='上海')
​
#使用多次plot可以画多个折线
plt.plot(x,y_beijing,color='r',linestyle='--',label='北京')
​
# 如果只在plt.plot()中设置label还不能最终显示出图例,还需要通过plt.legend()将图例显示出来。
#显示图例
plt.legend(loc="best")
​
plt.show()

# 多个坐标系显示
#导入matplotlib库
import matplotlib.pyplot as plt
import random
​
#设置显示中文字体
mpl.rcParams["font.sans-serif"]=["SimHei"]
#设置正常显示符号
mpl.rcParams["axes.unicode_minus"]=False
​
x=range(60)
y_shanghai=[random.uniform(15,18)for i in x]
y_beijing=[random.uniform(1,5)for i in x]
​
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=100)
​
axes[0].plot(x,y_shanghai,label="上海")
axes[1].plot(x,y_beijing,color="r",linestyle="--",label="北京")
​
x_ticks_label=["11点{}分".format(i)for i in x]
y_ticks=range(40)
​
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
​
axes[0].grid(True,linestyle="--",alpha=0.5)
axes[1].grid(True,linestyle="--",alpha=0.5)
​
axes[0].set_xlabel("时间")
axes[0].set_ylabel("温度")
axes[0].set_title("中午11点--12点某城市温度变化图",fontsize=20)
axes[1].set_xlabel("时间")
axes[1].set_ylabel("温度")
axes[1].set_title("中午11点--12点某城市温度变化图",fontsize=20)
​
axes[0].legend(loc=0)
axes[1].legend(loc=0)
​
plt.show()

# 常见图形种类
# 折线图:
plt.plot(x,y)
# 散点图
plt.scatter(x,y)
# 柱状图:
plt.bar(x,width,align='center',**kwargs)  #width:柱状图的宽度  align:每个柱状图的位置对齐方式   
# 直方图:
matplotlib.pyplot.hist(x,bins=None)  #bins:组距
# 饼图:
plt.pie(x,labels=,autopct=,colors) #x:数量,自动算百分比labels:每部分名称autopct:占比显示指定%1.2f%%colors:每部分颜色
# 散点图
import matplotlib.pyplot as plt
​
​
x = [225, 98, 247.07, 253, 14, 457]
y = [96.63, 203.88, 210.75, 372.74, 202.41, 247.61]
​
plt.figure(figsize=(20, 8), dpi=100)
​
plt.scatter(x, y)
​
plt.show()

# 柱状图:
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 原始数据
​
subjects = ['语文', '数学', '英语', '物理', '化学', '生物']
average_male_scores = [85.5, 91, 72, 59, 66, 55]
average_female_scores = [94, 82, 89.5, 62, 49, 53]
​
# 绘制柱形图
plt.figure(figsize=(8, 6))
plt.bar(subjects, average_male_scores, width=0.4, label='Male', align='center')
plt.bar(subjects, average_female_scores[:len(subjects)], width=0.4, label='Female', align='edge')
plt.xlabel('学科')
plt.ylabel('平均成绩')
plt.title('男女生各科平均成绩')
plt.legend()
plt.show()

# 饼图
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 子类目名称和销售额数据
categories = ['童装', '奶粉辅食', '孕妈专区', '洗护喂养', '宝宝尿裤', '春夏新品', '童车童床', '玩具文娱', '童鞋']
sales_amounts = [29665,  3125.4, 4292.4, 52040.9, 5543.4, 5633.8, 6414.5, 9308.1, 10350]
# 绘制饼图
plt.figure(figsize=(8, 8))
plt.pie(sales_amounts, labels=categories, autopct='%1.1f%%', startangle=140)
# 添加标题
plt.title('拼多多平台子类目销售额占比情况')
# 显示图例
plt.legend()
# 显示饼图
plt.show()
​

numpy的介绍

# ndarray的使用
import numpy as np
#创建ndarray
score=np.array(
[[80,89,86,67,79],
 [78,97,89,67,81],
 [90,94,78,67,74],
 [91,91,90,67,69],
 [76,87,75,67,86],
 [70,79,84,67,84],
 [94,92,93,67,64],
 [86,85,83,67,80]])
score

array([[80, 89, 86, 67, 79],
       [78, 97, 89, 67, 81],
       [90, 94, 78, 67, 74],
       [91, 91, 90, 67, 69],
       [76, 87, 75, 67, 86],
       [70, 79, 84, 67, 84],
       [94, 92, 93, 67, 64],
       [86, 85, 83, 67, 80]])

# ndarray与Python原生list运算效率对比,可得ndarray的计算速度要快
import random
import numpy as np
import time
​
# 使用 Python 原生 list
a = []
for i in range(100000000):
    a.append(random.random())
​
# 计算 Python 原生 list 的求和时间
start_time = time.time()
sum1 = sum(a)
end_time = time.time()
time_sum1 = end_time - start_time
print(f"Python 原生 list 求和时间:{time_sum1} 秒")
​
# 使用 NumPy ndarray
b = np.array(a)
​
# 计算 NumPy ndarray 的求和时间
start_time = time.time()
sum2 = np.sum(b)
end_time = time.time()
time_sum2 = end_time - start_time
print(f"NumPy ndarray 求和时间:{time_sum2} 秒")
​
# 验证两种方法的求和结果是否一致
assert abs(sum1 - sum2) < 1e-9, "求和结果不一致"
​
# 输出时间比较结果
print(f"NumPy ndarray 比 Python 原生 list 快了 {time_sum1 - time_sum2} 秒")
​
Python 原生 list 求和时间:0.5612270832061768 秒
NumPy ndarray 求和时间:0.12047505378723145 

# ndarray的属性:
ndarray.shape数组维度的元组
nadarry.ndim:数组维数
ndarry.size:数组中元素数量
nadarry.itemsize:一个数组元素的长度
nadarry.dtype:数组元素的类型
# 创建数组:
a=np.array([[1,2,3],[4,5,6]])
b=np.array([1,2,3,4])
c=np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
​
a.shape 
b.shape 
c.shape

生成数组的方法

# 生成0和1的数组
import numpy as np
​
ones=np.ones([4,8]) #全为1的数组
ones
zeors=np.zeros_like(ones) #全为0的数组
zeors

array([[0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0.]])

# 生成固定范围的数组
np.linspace (start, stop, num, endpoint)
# 参数:
# start:序列的起始值
# stop:序列的终止值
# num:要生成的等间隔样例数量,默认为50
# endpoint:序列中是否包含stop值,默认为ture
​
#创建等差数组 — 指定步长
np.arange(start,stop, step, dtype)
# 参数
# step:步长,默认值为1
​
# 创建等比数列
 np.logspace(start,stop, num)
# 参数:
# num:要生成的等比数列数量,默认为50
  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值