python3机器学习概述

语言:python3
框架:Scikit-learn 内置数据集或通过其可以直接下载的数据集
其他:numpy,matplotlib,…
IDE:Jupyter Notebook,pycharm
以上有ANACONDA集成

人工智能>机器学习>深度学习
内容:KNN 、线性回归、多项式回归、逻辑回归、模型正则化、PCA、SVM、决策树、随机森林、集成学习、模型选择、模型调试
排名前三的算法:逻辑回归、决策树、随机森林、神经网络(深度学习基础)

深入理解算法基本原理
实际使用算法解决真实场景的问题
对不同算法进行对比试验
对同一算法的不同参数进行对比试验
对部分算法底层编写
如何评价算法的好坏?
如何解决过拟合和欠拟合?
如何调节算法的参数?
如何验证算法的正确性?

分类任务本质就是在特征空间切分,高维空间同理

机器学习的任务
按可解决问题分类:
分类任务:二分类、多分类
回归任务:结果是一个连续数字的值,而非一个类别

1
2
3
4
5
graph TD
A[输入大量学习资料] -->B(机器学习算法)
B(机器学习算法) -->C(模型/函数)
D(输入样例) -->C(模型/函数)
C(模型/函数) -->E(输出结果)

按算法分类:

监督学习(大部分):
给机器的训练数据拥有“标记”或“答案”

非监督学习:
给机器的训练数据没有任何“标记”或者“答案”,对没有“标记”的数据进行分类-聚类分析
意义:
1、对数据进行降维处理:特征提取、特征压缩
2、方便可视化
3、异常检测

半监督学习:
一部分数据有“标记”或“答案”,一部分没有
通常先使用无监督学习对数据做处理,之后使用监督学习手段做模型的训练和预测

增强学习:
根据周围环境的情况,采取行动,根据采取行动的结果,学习行动方式
(无人驾驶、机器人)

又可分
批量学习(离线):
优:简单
缺:如何适应环境变化
解决方法:定时重新批量学习
新缺点:每次重新批量学习,运算量巨大,在某些环境变化非常快的情况下,甚至不可能

在线学习
优:及时反映新的环境变化
缺:新的数据带来不好的变化
解决方案:需要加强对数据进行监控

又可分
参数学习(一旦学到了参数,就不再需要原有的数据集)
非参数学习:不对模型建模,不代表没参数

jupyter notebook
魔法命令
%run 运行外部文件
%timeit 加句子
%%timeit 加语句段
%time 一次循环
%lsmagic 查看其他魔法命令

numpy基础
import numpy as np

限定类型
import array
arr=array.array(‘i’,[i for i in range(10)])

numpy.array

nparr=np.array([i for i in range(10)])
nparr.dtype查看类型

创建0一维向量
np.zeros(10)
创建0数组
np.zeros((3,5))

全1数组
np.ones(10)
np.ones((3,5))

全是666数组
np.full(shape=(3,5),fill_value=66)

arange

[i for i in range(0,20,2)]——–python
np.arange(0 , 20, 2)—–可以用小数步长

linspace等差数列

np.linspace(0 , 20 ,0 )——包含起始点)

random

np.random(10)—-生成10个在0-1之间的随机数
np.random.randint(0 ,10)
np.random.randint(0 ,10, size=10)—–生成随机数组,取值前闭后开
np.random.randint(0 ,10, size=(3 , 5))
np.random.seed(666)—–设置种子,随机数固定,用于调试
np.random.normal( )——-正态分布
np.random.normal(10,100,(3,5) )—–均值为10,方差为100

numpy.array的基本操作

基本属性

x.ndim——元素x的维度
x.shape——
x.size——-元素个数

numpy.array的数据访问

x[0] x[-1] x[2,2]—–访问第2行第二列
x[0:5]=x[:5]——切片访问,访问0-5,不包含5
x[5:]——–访问5到最后一个数,包含5
x[::2]———-步长2、
x[:2 ,:3 ]—取前2行,前3列
修改子矩阵中的元素会影响原矩阵
subx=x[:2,:3].copy 此时修改不会影响原矩阵

reshape

x.reshape(2,5)不改变x自身,改变矩阵形式,必须能整除

合并操作

np.concatenate{[x , y]) 2个2×3矩阵变成4个2×3
np.concatenate([x,y].axis=1) 沿着列的方向进行拼接
np.concatenate([a,Z.reshape(1,-1)])—维数相等才能拼接
np.vstack( [ A, z ] )将数组垂直方向叠加在一起,即使维度不同
np.hstack( [ A, z ] )将数组水平方向叠加在一起,即使维度不同

分割操作

array([0,1,2,3,4,5,6,7,8,9])
x1,x2,x3=np.split(x,[3,7])
二维数组基于行分割
axis=1 基于列分割
np.vsplit( )
np.hsplit( )

矩阵乘法

L=np.arange(n)
2×L 矩阵中所有元素进行运算
标准的矩阵运算
A.dot(B) A.T转置

向量与矩阵的运算

低维向高维每个元素进行运算
np.tile(v,(2,1))行堆叠2次,列堆叠1次

矩阵的逆

np.linalg.inv(A)
np.linalg.pinv(A)伪逆 原矩阵与逆矩阵相乘为单位矩阵

聚合操作

np.sum( ) np.min( ) np.max( ) np.sum(x,axis=0)–行相加
比原生的sum运算更快
np.prod(x)乘积
np.mean( ) 平均数
np.mwdian( ) 中位数
np.var( )方差
np.std( )标准差

索引

np.argmin( )返回索引号
np.argmax( )

排序和使用索引

np.random.shuffle( ) 乱序排序
np.sort(x) 顺序排序 并没有改变x x.sort( )改变x
矩阵默认行内排序,axis=1 axis=0列内排序
np.partition(x,3) 结果中比3小的数字放前面

fancy index

ind=[3, 5, 8]
x[ind]索引3,5,8
row=np.array([0,1,2])
col=np.array([1,2,3])
x[row,col]
col=[True,False,True,True]

numpy.array的比较

x<3
array([True,False,True,True])
np.any(x==0)有0返回True
np.all(x>=0) 所有元素满足才返回True

matplotlib基础

import matplotlib as mpl
import matplotlib.pyplot as plt 通常调用子模块

plt.plot(x,y,color=” “,linestyle=” “,label=”cos(x)”)
plt.show( )
plt.xlim(-5,15)x轴范围 ,y轴同理
plt.axis([-1,11,-2,2])同时对x,y轴进行调整
plt.xlabel(“x axis”)坐标轴名称
plt.legend( )加上注释
plt.title(“ “)

Scatter Plot绘制散点图
plt.scatter(x,y,alpha=0.1)alpha调节透明度

读取数据和简单的数据探索

0%