矩阵分解:从基础到机器学习的应用

需积分: 5 6 下载量 54 浏览量 更新于2024-06-21 1 收藏 832KB PDF 举报
"Book4_Ch11_矩阵分解__矩阵力量__从加减乘除到机器学习.pdf" 矩阵分解是数学和计算科学中的核心概念,特别是在机器学习和数据分析领域。本章《矩阵力量》的第11章主要探讨了矩阵分解的原理及其在机器学习中的应用。矩阵分解类似于代数中的因式分解,它将一个大而复杂的矩阵拆解成多个简单矩阵的组合,以便更好地理解和操作。这种分解方法有助于揭示数据内在的结构和模式,从而在预测分析、推荐系统、图像处理和自然语言处理等多个方面发挥重要作用。 在Python编程中,有几个关键的库函数用于执行不同的矩阵分解: 1. `numpy.linalg.cholesky()`:执行Cholesky分解,它将一个对称正定矩阵A分解为LL^T的形式,其中L是对角线以下元素全为0的下三角矩阵。这种方法常用于求解线性系统和计算逆矩阵。 2. `numpy.linalg.eig()`:进行特征值分解,将矩阵A表示为PDP^-1,其中D是对角矩阵,包含A的特征值,P是包含对应特征向量的矩阵。特征值分解可用于分析矩阵的稳定性、固有频率等问题。 3. `numpy.linalg.qr()`:执行QR分解,将矩阵A分解为QR,Q是正交矩阵,R是上三角矩阵。QR分解在求解线性最小二乘问题、计算特征值和特征向量等方面有广泛应用。 4. `numpy.linalg.svd()`:进行奇异值分解(SVD),将矩阵A分解为USV^T,U和V是酉矩阵,S是对角矩阵,其对角线元素是A的奇异值。SVD在数据压缩、图像处理、机器学习算法如主成分分析(PCA)中扮演关键角色。 5. `scipy.linalg.ldl()`:执行LDL分解,与Cholesky分解类似,但更稳定,尤其适用于近似对称矩阵。 6. `scipy.linalg.lu()`:实现LU分解,将矩阵A分解为LU,L是单位下三角矩阵,U是上三角矩阵。LU分解常用于求解线性方程组。 7. `numpy.meshgrid()`:生成网格化数据,用于创建多维坐标数组,便于在二维平面上绘制等高线图或三维空间中的图形。 8. `matplotlib.pyplot.contour()`和`matplotlib.pyplot.contourf()`:分别用于绘制等高线图和填充等高线图,这些函数可以帮助可视化矩阵或数据集的特征。 9. `seaborn.heatmap()`:绘制热图,这是一种直观展示矩阵数据分布的方法,常用于显示数据的相关性和矩阵的对角线主导性。 矩阵分解在机器学习中有着广泛的应用,例如协同过滤(用于推荐系统)、主成分分析(PCA)、独立成分分析(ICA)以及非负矩阵分解(NMF)。通过矩阵分解,可以降低数据的维度,提取重要特征,帮助构建更高效的模型。同时,这些分解方法也常用于优化问题、系统建模和控制理论等领域。理解并熟练掌握矩阵分解技术,对于深入理解和应用机器学习算法至关重要。
2023-06-12 上传

import requests import os from bs4 import BeautifulSoup class book_spider(): def __init__(self,root_url): self.root_url=root_url self.book_list=[] #一级页面中获取的数据(二级页面地址)存放于此列表 self.chapter_list=[] #二级页面中获取的数据(三级页面地址和章节名)存放于此列表 def get_url(url): while True: try: res=requests.get(url) if res.status_code==200: res.encoding =res.apparent_encoding print("页面获取成功") return res.text else: print("页面返回异常",res.status_code) except: print("页面获取错误") def get_book_list(self.url): res = self.get_url(url) html = BeautifulSoup(res,"html.parser") a_list = html.find_all("a",{"class":"name"}) for a in a_list: self.book_list.append(a["href"]) self.book_list = [self.root_url+i for i in self.bbok_list] self.book_list.remove('http://10.1.88.252:7000/庆余年') print(book_list) def get_chapter_list(self,url): res = self.get_url(url) html = BeautifulSoup(res,"html.parser") a_list = html.find_all("a",{"class":"chapter"}) for a in a_list: self.chapter_list.append((a["href"],a.text.replace("\n",""))) def get_content(self.chapter): url = self.root_url + chapter[0] print(url) book_name = chapter[0].split("/")[1] print(book_name) if not os.path.exists(book_name): os.mkdir(book_name) res = self.get_url(url) html = BeautifulSoup(res,"html.parser") content = html.find("div",{"id":"content"}).text print(content) path = os.path.join(book_name,chapter[1]) with open(path,"w",encoding="utf8") as f: f.write(content) def main(): self.get_book_list(self.root_url) for book in self.book_list: self.get_chapter_liat(book) for chapter in chapter_list: self.get_content(chapter) book_s = book_spider("http://10.1.88.252:7000") book_s.main()这是一段爬虫代码,找出里面的错误并改正

2023-06-02 上传

帮我把一下代码设置一个合理请求头,并加入一个延时import requests import os from bs4 import BeautifulSoup class NovelDownloader: def __init__(self, root_url): self.root_url = root_url self.book_list = [] self.chapter_list = [] def get_url(self, url): while True: try: res = requests.get(url) if res.status_code == 200: print("页面获取成功!") return res.text else: print("页面返回异常!", res.status_code) except: print("页面获取错误!") def get_book_list(self): res = self.get_url(self.root_url) html = BeautifulSoup(res, "html.parser") a_list = html.find_all("a", {"class": "name"}) for a in a_list: self.book_list.append(a["href"]) self.book_list = [self.root_url + i for i in self.book_list] self.book_list.remove('http://www.biquge5200.cc/') def get_chapter_list(self, url): res = self.get_url(url) html = BeautifulSoup(res, "html.parser") a_list = html.find_all("a", {"class": "chapter"}) for a in a_list: self.chapter_list.append((a["href"], a.text.replace("\n", ""))) def get_content(self, chapter): url = self.root_url + chapter[0] print(url) book_name = chapter[0].split("/")[1] print(book_name) if not os.path.exists(book_name): os.mkdir(book_name) res = self.get_url(url) html = BeautifulSoup(res, "html.parser") content = html.find("div", {"id": "content"}).text print(content) path = os.path.join(book_name, chapter[1]) with open(path, "w", encoding="utf8") as f: f.write(content) def main(self): self.get_book_list() for book in self.book_list: self.get_chapter_list(book) for chapter in self.chapter_list: self.get_content(chapter) if __name__ == '__main__': root_url = "http://www.biquge5200.cc/" nd = NovelDownloader(root_url) nd.main()

2023-06-02 上传