Python实现最大似然估计
数据部分
这个部分,我们使用的是csv数据。下面介绍数据处理的方法。
数据读取
在Python中,我们可以使用内置的
csv
模块来读取csv文件。以下是一个简单的例子,演示如何将csv文件读取为多维列表:
import csv
# 创建一个空列表来存储数据
data = []
# 使用with语句打开csv文件,这样可以确保文件在使用完之后会被正确关闭
with open('your_file.csv', 'r') as f:
# 创建一个csv阅读器
reader = csv.reader(f)
# 遍历csv文件中的每一行
for row in reader:
# 将每一行的数据转换为浮点数,并添加到数据列表中
data.append([float(x) for x in row])
# 打印数据列表
print(data)
这段代码会读取csv文件中的每一行,并将每一行的数据转换为浮点数的列表,然后将这些列表添加到
data
列表中,最终得到一个多维列表。
如果存在列名,那我们需要使用
next()
函数来跳过第一行,修改代码如下:
import csv
# 创建一个空列表来存储数据
data = []
# 使用with语句打开csv文件,这样可以确保文件在使用完之后会被正确关闭
with open('your_file.csv', 'r') as f:
# 创建一个csv阅读器
reader = csv.reader(f)
# 跳过第一行(列名)
next(reader)
# 遍历csv文件中的每一行
for row in reader:
# 将每一行的数据转换为浮点数,并添加到数据列表中
data.append([float(x) for x in row])
# 打印数据列表
print(data)
在这个例子中,
your_file.csv
应该被替换为你的csv文件的实际路径。这段代码会跳过csv文件的第一行(列名),然后读取每一行的数据,将每一行的数据转换为浮点数的列表,然后将这些列表添加到
data
列表中,最终得到一个多维列表。
注意,这个例子假设csv文件中的每一行(除了第一行)都有相同数量的数据,并且所有的数据都可以被转换为浮点数。如果你的csv文件不符合这些假设,你可能需要修改这段代码以适应你的具体情况。
最大似然估计MLE
根据最大似然估计理论写出我们的计算函数。函数接受数据输入,会输出数据的均值向量和协方差矩阵。当数据维度为1时,我们函数会返回对应的均值和方差。
# 均值向量u的计算公式为:u = (1/N) * Σx_i,其中x_i是每个样本,N是样本总数。
# 协方差矩阵δ的计算公式为:δ = (1/N) * Σ(x_i - u)(x_i - u)^T,其中^T表示转置。
def MLE(data):
# 数据数目
N = len(data)
# 健壮性,防止没有数据
if N == 0:
return 0, 0
# 检查数据维度
if isinstance(data[0], list):
# 数据是多维的
N_features = len(data[0])
# 初始化
u = [0 for i in range(N_features)]
theta = [[0 for i in range(N_features)] for j in range(N_features)]
# 计算均值向量
for x in data:
for i in range(N_features):
u[i] += x[i]
for i in range(N_features):
u[i] /= N
# 计算协方差矩阵
for x in data:
for i in range(N_features):
for j in range(N_features):
theta[i][j] += (x[i] - u[i]) * (x[j] - u[j])
for i in range(N_features):
for j in range(N_features):
theta[i][j] /= N
else:
# 数据是一维的
N_features = 1
# 初始化
u = [0]
theta = [[0]]
# 计算均值
for x in data:
u[0] += x