admin管理员组

文章数量:1794759

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

机器学习基础

机器学习概览

什么是机器学习?

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

机器学习的应用领域

机器学习的应用非常广泛,涵盖了从图像识别、语音识别到自然语言处理等多个领域。具体应用包括: 图像识别:用于人脸识别、物体检测等。 语音识别:用于语音助手、语音转文字等。 自然语言处理:用于情感分析、机器翻译、聊天机器人等。 推荐系统:用于电子商务网站上的产品推荐。 欺诈检测:用于信用卡欺诈检测、网络攻击检测等。

机器学习的主要类型
监督学习

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

无监督学习

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

半监督学习

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

强化学习

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

数学基础复习

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) = 2

Var(X) = 9

Var(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 - 1

x = 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库介绍

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

创建数组
代码语言:javascript代码运行次数:0运行复制
import numpy as np

# 创建一维数组
arr1 = np.array([1, 2, 3])
print(arr1)

# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])
print(arr2)
数组属性
代码语言:javascript代码运行次数:0运行复制
# 获取数组的形状
shape = arr2.shape
print(shape)  # 输出 (2, 3)

# 获取数组的维度
ndim = arr2.ndim
print(ndim)  # 输出 2

# 获取数组的元素类型
dtype = arr2.dtype
print(dtype)  # 输出 int64
数组操作
代码语言:javascript代码运行次数:0运行复制
# 数组加法
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]]
数组索引与切片
代码语言:javascript代码运行次数:0运行复制
# 索引
print(arr2[0, 1])  # 输出 2

# 切片
print(arr2[:, 1:])  # 输出 [[2 3] [5 6]]
数组重塑
代码语言:javascript代码运行次数:0运行复制
reshaped = arr2.reshape(3, 2)
print(reshaped)  # 输出 [[1 2] [3 4] [5 6]]
数组堆叠
代码语言:javascript代码运行次数:0运行复制
# 水平堆叠
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]]
数组分割
代码语言:javascript代码运行次数:0运行复制
# 水平分割
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]])]
统计函数
代码语言:javascript代码运行次数:0运行复制
mean = np.mean(arr1)
std = np.std(arr1)
print(mean, std)  # 输出 2.0 0.816496580927726
Pandas库介绍

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

创建Series
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
import pandas as pd

# 从列表创建Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
创建DataFrame
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
# 从字典创建DataFrame
data = {'A': [1, 2, 3, 4],
        'B': [5, 6, 7, 8],
        'C': [9, 10, 11, 12]}
df = pd.DataFrame(data)
print(df)
查看数据信息
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
# 查看前几行数据
print(df.head())

# 查看数据统计信息
print(df.describe())
数据筛选
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
# 选择某一列
column_A = df['A']
print(column_A)

# 选择多列
columns_AB = df[['A', 'B']]
print(columns_AB)

# 选择行
row = df[df['A'] > 2]
print(row)
数据清洗
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
# 删除缺失值
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)
数据聚合
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
# 按列求和
sum_column = df.sum(axis=0)
print(sum_column)

# 按行求和
sum_row = df.sum(axis=1)
print(sum_row)
数据合并
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
# 水平合并
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)
数据排序
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
'''排序并不会改变缺失值的位置,而是在排序结果中相应位置进行排序'''
# 按某一列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)
代码语言:javascript代码运行次数:0运行复制
'''使用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)
代码语言:javascript代码运行次数:0运行复制
'''在使用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)
数据分组求和
代码语言:javascript代码运行次数:0运行复制
代码语言:javascript代码运行次数:0运行复制
# 按某一列分组
grouped = df.groupby('A').sum()
print(grouped)
#按多列分组
grouped1=df.groupby(['A','B']).sum()
print(grouped1)

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

实操:
数据:
代码语言:javascript代码运行次数:0运行复制
  Category Subcategory  Value
        A           X     10
        A           Y     20
        B           X     30
        B           Y     40
        C           X     50
        C           Y     60
单组结果:
代码语言:javascript代码运行次数:0运行复制
         Value
Category       
A            30
B            70
C           110
'''数据按'Category'列进行分组。每个类别(A, B, C)的所有'Value'值被求和。
结果显示每个'Category'组中'Value'的总和。'''
多组结果:
代码语言:javascript代码运行次数:0运行复制
                       Value
Category Subcategory       
A        X                10
         Y                20
B        X                30
         Y                40
C        X                50
         Y                60
'''数据按照'Category'和'Subcategory'这两列进行分组。
每个'Category'和'Subcategory'的组合对应的'Value'值被求和。
结果显示每个组合中的'Value'总和。'''
总代码:
代码语言:javascript代码运行次数:0运行复制
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
代码语言:javascript代码运行次数:0运行复制
pip install matplotlib
导入 Matplotlib
代码语言:javascript代码运行次数:0运行复制
import matplotlib.pyplot as plt
基本绘图

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

代码语言:javascript代码运行次数:0运行复制
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
代码语言:javascript代码运行次数:0运行复制
pip install seaborn
导入 Seaborn
代码语言:javascript代码运行次数:0运行复制
import seaborn as sns
基本绘图

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

代码语言:javascript代码运行次数:0运行复制
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 提供了许多高级图形,如热力图、箱型图、小提琴图等。下面是一些例子:

热力图
代码语言:javascript代码运行次数:0运行复制
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()
箱型图
代码语言:javascript代码运行次数:0运行复制
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()
小提琴图
代码语言:javascript代码运行次数:0运行复制
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()

若运行代码时出现错误:

检查网络连接:确保你的计算机连接到互联网且没有网络限制(访问国外网站)

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

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

代码语言:javascript代码运行次数:0运行复制
import seaborn as sns 
import pandas as pd
# 手动下载并读取数据集 
tips = pd.read_csv("path/to/your/tips.csv")

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-08-11,如有侵权请联系 cloudcommunity@tencent 删除数据数组机器学习函数基础

本文标签: 机器学习速成第一集机器学习基础