机器学习速成第一集——机器学习基础

目录

机器学习基础

机器学习概览

什么是机器学习?

机器学习的应用领域

机器学习的主要类型

监督学习

无监督学习

半监督学习

强化学习

数学基础复习

NO.1线性代数复习

向量

矩阵运算

特征值与特征向量

NO.2概率与统计复习

概率统计基础

一、概率de基本概念:

1.随机试验:

2.样本空间:

3..事件:

4.古典概率:

5.条件概率:

6.独立事件:

7.贝叶斯定理:

8.随机变量:

9.期望与方差:

10.协方差与相关系数:

二、统计推断de基本概念

三、例题

例题 1:

例题 2:

例题 3:

NO.3 微积分复习

微积分基础

 1. 导数与微分

2. 积分

3. 多元微积分

Python编程基础

NumPy库介绍

创建数组:​编辑

数组属性:

数组操作:

数组索引与切片:​编辑

数组重塑:​编辑

数组堆叠:​编辑

数组分割:​编辑

统计函数:​编辑

Pandas库介绍

创建Series:

创建DataFrame:

查看数据信息:

数据筛选:

数据清洗:

数据聚合:

数据合并:

数据排序:

数据分组求和:

实操: 

数据: 

 单组结果:

 多组结果:

总代码: 

Matplotlib或Seaborn库介绍

数据可视化

Matplotlib

安装 Matplotlib

导入 Matplotlib

基本绘图

​编辑

Seaborn

安装 Seaborn

导入 Seaborn

基本绘图

热力图

​编辑

箱型图

​编辑

小提琴图


机器学习基础

机器学习概览

什么是机器学习?

机器学习是人工智能的一个分支,它使计算机能够从经验中自动“学习”而无需明确编程。简而言之,机器学习是一种让计算机通过数据进行自我改进的方法。

机器学习的应用领域

机器学习的应用非常广泛,涵盖了从图像识别、语音识别到自然语言处理等多个领域。具体应用包括:

图像识别:用于人脸识别、物体检测等。

语音识别:用于语音助手、语音转文字等。

自然语言处理:用于情感分析、机器翻译、聊天机器人等。

推荐系统:用于电子商务网站上的产品推荐。

欺诈检测:用于信用卡欺诈检测、网络攻击检测等。

机器学习的主要类型

监督学习

给定带有标签的数据集,学习如何预测未知数据的标签

无监督学习

没有标签的数据集,目标是从数据中发现潜在的结构

半监督学习

介于监督学习和无监督学习之间,数据集包含少量带标签的数据和大量未带标签的数据。

强化学习

智能体通过与环境互动学习策略,以最大化某种累积奖励。

数学基础复习

NO.1线性代数复习

详细请看我的《线性代数》专栏

向量

矩阵运算

特征值与特征向量

NO.2概率与统计复习

概率统计基础

详细请看我的《概率论》专栏

一、概率de基本概念:
1.随机试验:

具有不确定结果的试验称为随机试验。

2.样本空间:

随机试验的所有可能结果组成的集合。

3..事件:

样本空间的子集。

4.古典概率:

当所有可能的结果都等可能发生时,事件A的概率定义为:
 

5.条件概率:

事件B发生条件下事件A发生的概率定义为:
 

6.独立事件:

则事件A和B相互独立。

7.贝叶斯定理:

贝叶斯定理是条件概率的一种重要应用,它描述了根据某些证据或观察更新对某事件的概率估计的过程。
 
  其中P(A|B) 是在已知B发生的情况下A发生的概率;P(B|A) 是在已知A发生的情况下B发生的概率;P(A)是A发生的先验概率;P(B)是B发生的边缘概率。

8.随机变量:


离散随机变量:取值为可数集合的随机变量。

(当我们说一个集合是“可数”的时候,这意味着这个集合中的元素可以通过自然数来一一对应。换句话说,如果一个集合中的元素可以用自然数来编号,那么这个集合就是可数的)


连续随机变量:取值为实数区间内的随机变量。


概率质量函数 (PMF):对于离散随机变量X ,
概率密度函数 (PDF):对于连续随机变量X ,


累积分布函数 (CDF):

9.期望与方差:


期望:随机变量的平均值。
 
方差:衡量随机变量与其均值的偏离程度。
 

10.协方差与相关系数:


协方差:衡量两个随机变量之间线性关系的强度。

相关系数:标准化的协方差,范围在\(-1\)到\(1\)之间。
 

二、统计推断de基本概念

参数估计:基于样本数据估计总体参数。
点估计:使用样本统计量来估计总体参数。
区间估计:构造一个包含总体参数的置信区间。
假设检验:根据样本数据判断关于总体参数的假设是否合理。
原假设 H_0:待检验的假设。
备择假设 H_1:与原假设相对立的假设。
显著性水平 \alpha:犯第一类错误的概率阈值。

常用分布:
正态分布:参数为均值\mu和方差\sigma^2的连续概率分布。
二项分布:n次伯努利试验中成功次数的概率分布。
泊松分布:在一定时间内事件发生次数的概率分布。
指数分布:等待某个事件发生的时间间隔的概率分布。

三、例题
例题 1:

假设一个骰子被投掷一次,计算出现偶数的概率。

解:
样本空间 S = \{1, 2, 3, 4, 5, 6\}
事件 A  表示出现偶数: A = \{2, 4, 6\}
因此,P(A) = \frac{|A|}{|S|} = \frac{3}{6} = \frac{1}{2}

例题 2:

假设有一个二项分布B(n, p),其中n = 10 ,p = 0.3 ,计算恰好有 3 次成功的概率。

解:
二项分布的概率质量函数为 P(X=k) = {n \choose k} p^k (1-p)^{n-k}P(X=k) = C{k\choose n} p^k (1-p)^{n-k}
当 ( n = 10 ),( p = 0.3 ),( k = 3 ) 时,
P(X=3) = C{3 \choose 10} 0.3^3 (1-0.3)^{10-3} = \frac{10!}{3!(10-3)!} 0.3^3 0.7^7

例题 3:

给定两个随机变量X和Y,它们的协方差 Cov(X,Y) = 2Var(X) = 9Var(Y) = 4计算它们的相关系数。

解:

NO.3 微积分复习

微积分基础
 1. 导数与微分

导数:函数在某一点处的变化率。
定义:如果函数 f(x)在点x_0处的导数存在,则定义为:
f'(x_0) = \lim_{h \to 0} \frac{f(x_0+h) - f(x_0)}{h}
几何意义:导数在几何上表示函数图像在某一点处的切线斜率。
导数的规则:
幂规则:(x^n)' = nx^{n-1}
常数倍数规则:(cf(x))' = cf'(x)
和差规则:((f(x) \pm g(x))' = f'(x) \pm g'(x)

乘法法则:(f(x)g(x))' = f'(x)g(x) + f(x)g'(x)
除法法则:\left(\frac{f(x)}{g(x)}\right)' = \frac{f'(x)g(x) - f(x)g'(x)}{(g(x))^2}
链式法则:(f(g(x)))' = f'(g(x))g'(x)

例题:求函数f(x) = x^3 - 2x^2 + 3x - 1x = 2处的导数。

解:
应用幂规则和和差规则:
f'(x) = 3x^2 - 4x + 3
将  x = 2 代入  f'(x) :
f'(2) = 3(2)^2 - 4(2) + 3 = 12 - 8 + 3 = 7

2. 积分

不定积分:不定积分是导数的逆运算,表示函数的一个原函数族。
基本形式:\int f(x) dx = F(x) + C,其中 F(x) 是 f(x) 的一个原函数,C  是积分常数。
定积分:定积分表示曲线下方的面积或函数在某区间上的平均值。
基本形式:\int_a^b f(x) dx表示函数 f(x)  在区间 [a, b] 上的定积分。
积分的规则:
幂规则:\int x^n dx = \frac{x^{n+1}}{n+1} + C  ,其中n \neq -1
常数倍数规则:\int cf(x) dx = c\int f(x) dx
和差规则:\int (f(x) \pm g(x)) dx = \int f(x) dx \pm \int g(x) dx
换元积分法:通过变量替换简化积分。
分部积分法:适用于形如\int u dv的积分,利用 uv - \int v du的形式求解。

例题:计算函数f(x) = 3x^2 - 2x + 1在区间 [1, 3] 上的定积分。

解:
应用幂规则计算不定积分:
\int (3x^2 - 2x + 1) dx = x^3 - x^2 + x + C
计算定积分:
\int_1^3 (3x^2 - 2x + 1) dx = [x^3 - x^2 + x]_1^3 = (3^3 - 3^2 + 3) - (1^3 - 1^2 + 1) = (27 - 9 + 3) - (1 - 1 + 1) = 20

3. 多元微积分


偏导数:多元函数关于其中一个变量的变化率。
定义:如果函数 f(x, y) 在点(x_0, y_0)处关于  x 的偏导数存在,则定义为:
  \frac{\partial f}{\partial x}(x_0, y_0) = \lim_{h \to 0} \frac{f(x_0+h, y_0) - f(x_0, y_0)}{h}


梯度:多元函数的梯度是一个向量,其分量是各个变量的偏导数。
定义:对于函数 f(x, y) ,梯度定义为:
    \nabla f(x, y) = \left(\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}\right)

例题:求函数f(x, y) = x^2y + xy^2在点 (1, 2) 处的梯度。

解:

计算偏导数:
\frac{\partial f}{\partial x} = 2xy + y^2

\frac{\partial f}{\partial y} = x^2 + 2xy
将 x = 1 和  y = 2  代入:
\frac{\partial f}{\partial x}(1, 2) = 2(1)(2) + (2)^2 = 4 + 4 = 8
\frac{\partial f}{\partial y}(1, 2) = (1)^2 + 2(1)(2) = 1 + 4 = 5
因此,梯度为\nabla f(1, 2) = (8, 5)

Python编程基础

NumPy库介绍

详细介绍请看我的《Numpy库》这篇文章:

下面只用代码示例介绍一些基本的用法(上方为自己实践所得,下方是给的示例,看清楚,不一样的):

  • 创建数组
    import numpy as np
    
    # 创建一维数组
    arr1 = np.array([1, 2, 3])
    print(arr1)
    
    # 创建二维数组
    arr2 = np.array([[1, 2, 3], [4, 5, 6]])
    print(arr2)
  • 数组属性
  • # 获取数组的形状
    shape = arr2.shape
    print(shape)  # 输出 (2, 3)
    
    # 获取数组的维度
    ndim = arr2.ndim
    print(ndim)  # 输出 2
    
    # 获取数组的元素类型
    dtype = arr2.dtype
    print(dtype)  # 输出 int64
  • 数组操作
  • # 数组加法
    result = arr1 + arr1
    print(result)  # 输出 [2 4 6]
    
    # 数组乘法
    result = arr1 * 2
    print(result)  # 输出 [2 4 6]
    
    # 矩阵乘法
    result = np.dot(arr2, arr2.T)
    print(result)  # 输出 [[14 32] [32 77]]
  • 数组索引与切片
  • # 索引
    print(arr2[0, 1])  # 输出 2
    
    # 切片
    print(arr2[:, 1:])  # 输出 [[2 3] [5 6]]
  • 数组重塑
    reshaped = arr2.reshape(3, 2)
    print(reshaped)  # 输出 [[1 2] [3 4] [5 6]]
  • 数组堆叠
  • # 水平堆叠
    hstacked = np.hstack((arr2, arr2))
    print(hstacked)  # 输出 [[1 2 3 1 2 3] [4 5 6 4 5 6]]
    
    # 垂直堆叠
    vstacked = np.vstack((arr2, arr2))
    print(vstacked)  # 输出 [[1 2 3] [4 5 6] [1 2 3] [4 5 6]]
  • 数组分割
    # 水平分割
    split_h = np.hsplit(arr2, 2)
    print(split_h)  # 输出 [array([[1, 2], [4, 5]]), array([[3], [6]])]
    
    # 垂直分割
    split_v = np.vsplit(arr2, 2)
    print(split_v)  # 输出 [array([[1, 2, 3]]), array([[4, 5, 6]])]
  • 统计函数
    mean = np.mean(arr1)
    std = np.std(arr1)
    print(mean, std)  # 输出 2.0 0.816496580927726

Pandas库介绍

详细介绍请看我的《Pandas库》这篇文章:

下面只用代码示例介绍一些基本的用法(上方为自己实践所得,下方是给的示例,看清楚,不一样的):

  • 创建Series
     
    import pandas as pd
    
    # 从列表创建Series
    s = pd.Series([1, 3, 5, np.nan, 6, 8])
    print(s)
  • 创建DataFrame
     
    # 从字典创建DataFrame
    data = {'A': [1, 2, 3, 4],
            'B': [5, 6, 7, 8],
            'C': [9, 10, 11, 12]}
    df = pd.DataFrame(data)
    print(df)
  • 查看数据信息
     
    # 查看前几行数据
    print(df.head())
    
    # 查看数据统计信息
    print(df.describe())
  • 数据筛选
     
    # 选择某一列
    column_A = df['A']
    print(column_A)
    
    # 选择多列
    columns_AB = df[['A', 'B']]
    print(columns_AB)
    
    # 选择行
    row = df[df['A'] > 2]
    print(row)
  • 数据清洗
     
    # 删除缺失值
    cleaned_df = df.dropna()
    print(cleaned_df)
    # 显示指定行的数据
    row_index = 1 # 上述代码可知只有索引为1的一行存在
    selected_row = cleaned_df.loc[row_index, :]
    print(selected_row)
    # 替换缺失值
    df.fillna(value=0, inplace=True)
    print(df)
  • 数据聚合
     
    # 按列求和
    sum_column = df.sum(axis=0)
    print(sum_column)
    
    # 按行求和
    sum_row = df.sum(axis=1)
    print(sum_row)
  • 数据合并
     
    # 水平合并
    df2 = pd.DataFrame({'A': [1, 2, 3, 4], 'D': [5, 6, 7, 8]})
    merged = pd.concat([df, df2], axis=1)
    print(merged)
    
    # 垂直合并
    df3 = pd.DataFrame({'A': [1, 2], 'B': [5, 6]})
    merged = pd.concat([df, df3], axis=0)
    print(merged)
  • 数据排序
     
    '''排序并不会改变缺失值的位置,而是在排序结果中相应位置进行排序'''
    # 按某一列UP升序
    sorted_df = df.sort_values(by='A')
    print(sorted_df)
    
    # 按多列UP升序
    sorted_df = df.sort_values(by=['A', 'B'],na_position='first')
    print(sorted_df)
    '''使用ascending=False来指定降序排序。
    第一个排序结果将根据"A"列的值以降序排序,第二个排序结果将根据"A"列和"B"列的值进行降序排序。'''
    # 按单列down降序
    sorted_df = df.sort_values(by='A', ascending=False)
    print(sorted_df)
    
    # 按多列down降序
    sorted_df1 = df.sort_values(by=['A', 'B'], ascending=[False, False])
    print(sorted_df1)
    '''在使用sort_values方法时,只能指定一个na_position参数
    因为它只能接受一个值。但是我们可以通过使用.fillna()方法来在排序之前处理缺失值的位置。'''
    # 按多列排序,将缺失值放在前面
    sorted_df1 = df.sort_values(by=['A', 'B']).fillna(df.min())
    print(sorted_df1)
    
    # 按多列排序,将缺失值放在后面
    sorted_df2 = df.sort_values(by=['A', 'B']).fillna(df.max())
    print(sorted_df2)
  • 数据分组求和
     
    # 按某一列分组
    grouped = df.groupby('A').sum()
    print(grouped)
    #按多列分组
    grouped1=df.groupby(['A','B']).sum()
    print(grouped1)

上述例子可能不太清楚,接下来举一个更加清楚的例子:

实操: 

数据: 
  Category Subcategory  Value
        A           X     10
        A           Y     20
        B           X     30
        B           Y     40
        C           X     50
        C           Y     60
 单组结果:
         Value
Category       
A            30
B            70
C           110
'''数据按'Category'列进行分组。每个类别(A, B, C)的所有'Value'值被求和。
结果显示每个'Category'组中'Value'的总和。'''
 多组结果:
                       Value
Category Subcategory       
A        X                10
         Y                20
B        X                30
         Y                40
C        X                50
         Y                60
'''数据按照'Category'和'Subcategory'这两列进行分组。
每个'Category'和'Subcategory'的组合对应的'Value'值被求和。
结果显示每个组合中的'Value'总和。'''
总代码: 
import pandas as pd

data = {
    'Category': ['A', 'A', 'B', 'B', 'C', 'C'],
    'Subcategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'],
    'Value': [10, 20, 30, 40, 50, 60]
}

df = pd.DataFrame(data)
#单列
grouped = df.groupby('Category').sum()
print(grouped)
#多列
grouped1 = df.groupby(['Category', 'Subcategory']).sum()
print(grouped1)

Matplotlib或Seaborn库介绍

数据可视化
Matplotlib

详细介绍请看我的《Matplotlib库》这篇文章:

安装 Matplotlib
pip install matplotlib
导入 Matplotlib
import matplotlib.pyplot as plt
基本绘图

下面是一个简单的示例,展示如何使用 Matplotlib 绘制一条曲线。

import numpy as np
import matplotlib.pyplot as plt

# 创建数据
x = np.linspace(0, 10, 100)  # 生成从0到10的100个点
y = np.sin(x)

# 创建图表
plt.plot(x, y, label='sin(x)')  # 画出 x 对应 y 的曲线

# 添加图表标题和坐标轴标签
plt.title('Sine Wave')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')

# 添加图例
plt.legend()

# 显示图表
plt.show()
Seaborn

Seaborn 是基于 Matplotlib 构建的,提供了更多美观且易于使用的高级图形界面。Seaborn 的设计是为了简化复杂的图形制作过程,并且默认设置更加美观。

详细介绍请看我的《Seaborn库》这篇文章:

安装 Seaborn
pip install seaborn
导入 Seaborn
import seaborn as sns
基本绘图

下面是一个使用 Seaborn 绘制简单条形图的例子。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 创建数据
data = {'Category': ['A', 'B', 'C', 'D'],
        'Values': [10, 20, 30, 40]}
df = pd.DataFrame(data)

# 创建图表
sns.barplot(x='Category', y='Values', data=df)

# 添加标题和坐标轴标签
plt.title('Bar Plot Example')
plt.xlabel('Categories')
plt.ylabel('Values')

# 显示图表
plt.show()

更多高级图形

Seaborn 提供了许多高级图形,如热力图、箱型图、小提琴图等。下面是一些例子:

热力图
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 创建数据
corr_matrix = np.random.rand(5, 5)

# 创建热力图
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

# 显示图表
plt.show()
箱型图
import seaborn as sns
import matplotlib.pyplot as plt

# 加载内置数据集
tips = sns.load_dataset("tips")

# 创建箱型图
sns.boxplot(x="day", y="total_bill", data=tips)

# 显示图表
plt.show()
小提琴图
import seaborn as sns
import matplotlib.pyplot as plt

# 加载内置数据集
tips = sns.load_dataset("tips")

# 创建小提琴图
sns.violinplot(x="day", y="total_bill", data=tips)

# 显示图表
plt.show()

若运行代码时出现错误: 

  1. 检查网络连接:确保你的计算机连接到互联网且没有网络限制(科学上网)

  2. 使用代理:如果你在公司或学校网络中,可能需要配置代理。

  3. 手动下载数据集:从 Seaborn的GitHub页面 下载数据集,然后通过本地文件加载:

    
    import seaborn as sns 
    import pandas as pd
    # 手动下载并读取数据集 
    tips = pd.read_csv("path/to/your/tips.csv")

    以上便是总结出的第一集!!包最正义的一集!! 

  

    制作总结不易,希望得到你们的三连支持!谢谢~

评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ctrl+CV九段手

谢谢大佬的赏识!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值