机器学习
人工智能发展必备三要素 :
数据
算法
计算力
人工智能和机器学习、深度学习的关系:
机器学习是人工智能的一个实现途径
深度学习是机器学习的一个方法发展而来
人工智能主要分支 :
计算机视觉
语音识别
文本挖掘分类
机器翻译
机器人
机器学习工作流程总结:
获取数据
数据基本处理
特征工程
机器学习
模型评估
数据集介绍:
数据集中一行数据称为一个样本,一列数据成为一个特征
数据集的构成:
由特征值+目标值构成
数据集分为训练数据和测试数据
机器学习算法分类:
##### 监督学习
输入数据由输入特征值和目标值组成
函数的输出可以是一个连续的值或是有限个离散值
##### 无监督学习
输入数据由特征值组成,没有目标值
输入数据没有被标记,没有确定的结果,样本数据类别未知,需要根据样本间的相似性 对样本集进行类别划分
##### 半监督学习
训练集同时包含由标记样本数据和未标记样本数据
##### 强化学习
自动进行决策,可以做连续决策
强化学习的目标就是获得最多的累计奖励
模型评估:
##### 分类模型评估
准确率为预测正确的数占样本总数的比例
##### 回归模型评估
利用均方根误差评估
##### 拟合
欠拟合:模型学习的太过粗糙,训练集中的样本数据特征没有学到
过拟合:所建的学习模型或者是深度学习在训练样本中表现得过于优越,导致在测试数 据集中表现不佳。
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() #显示画布
![](https://i-blog.csdnimg.cn/direct/062585f0b15c4c32844e8476f8bc5c05.png)
#导入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()
![](https://i-blog.csdnimg.cn/direct/5329ce78e2e74b9688152c55b562eca2.png)
# 在一个坐标系中绘制多个图像
#导入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()
![](https://i-blog.csdnimg.cn/direct/d06ac24a681743dda81ca444d41302de.png)
#导入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()
![](https://i-blog.csdnimg.cn/direct/4b125d0d415d416faaecc79b4e1d2b12.png)
# 多个坐标系显示
#导入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()
![](https://i-blog.csdnimg.cn/direct/e4a40fc7791a4291b87794c47cc9cf6f.png)
# 常见图形种类
# 折线图:
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()
![](https://i-blog.csdnimg.cn/direct/9d1bc197b0b346469e2b086bd543de3a.png)
# 柱状图:
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()
![](https://i-blog.csdnimg.cn/direct/cc7541c407074059b2ef7e3d7d1f29f0.png)
# 饼图
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