首页 > 编程语言 >Python实现最大似然估计

Python实现最大似然估计

时间:2023-09-13 13:56:58浏览次数:38  
标签:似然 features Python 数据 列表 range 估计 csv data

数据部分

这个部分,我们使用的是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
        u[0] /= N
        # 计算方差
        for x in data:
            theta[0][0] += (x - u[0]) ** 2
        theta[0][0] /= N
    return u, theta

标签:似然,features,Python,数据,列表,range,估计,csv,data
From: https://www.cnblogs.com/zuiyixin/p/17699491.html

相关文章

  • day0-Python之路-编码之始-致那些年,我们依然没搞明白的编码
    本节内容编码回顾编码转换Python的bytes类型 编码回顾在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有一天它会猝不及防坑你一把。不过感觉这哥们的答案并没把编码问题写明白,所以只好......
  • 《Python编程从入门到实践》--- 学习过程笔记(4)列表操作
    一、遍历列表squares=('a','b','c','d')foriinlist(squares):print(i)二、python根据缩进来判断代码与前一个代码行的关系。(要注意缩进问题)for循环中,其下的所有缩进语句都属于for循环。三、数字列表创建及操作(1)range()函数。range(a,b)只打印a到b前一......
  • Centos7升级python3.9
    Centos7升级python3.91.系统升级yumupdate-yyum-ygroupinstall"Developmenttools"yuminstallopenssl-develbzip2-develexpat-develgdbm-develreadline-develsqlite-develpsmisclibffi-devel2.下载python3.9源码包wgethttps://www.python.org/ftp/py......
  • Python文件操作
    Python文件操作文件的编码计算机只能识别:0和1,我们需要使用编码技术(密码本)将内容翻译成0和1存入。计算机中有许多可用编码:UTF-8、GBK、Big5等,不同的编码,将内容翻译的二进制也是不相同的。编码:编码就是一种规则集合,记录了内容和二进制间进行相互转换的逻辑。编码有许多中,我们......
  • Python - unix timestamp 时间戳转换错误
    用python的时间转换函数,结果报错。想着这么基础的怎么会报错呢。fromdatetimeimportdatetime#timestampisnumberofsecondssince1970-01-01timestamp=1545730073#convertthetimestamptoadatetimeobjectinthelocaltimezonedt_object=datetime.from......
  • day八-Python之路 - Socket网络编程
    Python之路,Day8-Socket网络编程 本节内容Socket介绍Socket参数介绍基本Socket实例Socket实现多连接处理通过Socket实现简单SSH通过Socket实现文件传送作业:开发一个支持多用户在线的FTP程序  1.Socket介绍概念A networksocket isanendpointofacon......
  • 在线问诊 Python、FastAPI、Neo4j — 创建症状节点
    目录参考创建药品节点。importloggingfromutils.neo4j_providerimportdriverlogging.root.setLevel(logging.INFO)#并生成CQLdefgenerate_cql()->str:cql="""CREATE(symptom1:Symptom{name:"膝盖疼"}),(symptom2......
  • Error: Package: libselinux-python-2.2.2-6.el7.x86_64 (@anaconda) Requ
    ==========直接抛出问安装问题===场景安装nginx时相关的依赖包不配套问题 yum-yinstallgccpcre-develzlibzlib-developensslopenssl-devel ===系统centos7安装nginx====解决方案1.安装yum-utils相关工具yum-yinstallyum-utils2.清理yumyumcleanall3.清理未完成......
  • 18条超好用的Python小技巧
    在这篇文章中,我们将讨论最常用的python技巧。大多数这些技巧都是我在日常工作中使用过的简单的Trick,我觉得好东西就是要拿出来和大家一起分享。闲话少说,我们直接开始吧!:)处理用户的多个输入有时我们需要从用户那里获得多个输入,以便使用循环或任何迭代,一般的写法如下:#badpractic......
  • 使用python+ffmpeg+youtube-dl下载youtube上的视频
    使用python+ffmpeg+youtube-dl下载youtube上的视频 一、准备工作1、安装python,详见https://www.cnblogs.com/cnwuchao/p/10562416.html2、安装ffmpeg,详见https://www.cnblogs.com/cnwuchao/p/10562455.html3、安装youtube-dl,详见https://www.cnblogs.com/cnwuchao/p/10562......