线性回归分析:理论与实践

需积分: 0 0 下载量 89 浏览量 更新于2024-08-05 收藏 4.59MB PDF 举报
"本章节主要讨论线性回归及其在实际应用中的挑战,特别是高维数据下的问题。同时,提到了线性回归与非参数方法,如KNN(K近邻)之间的选择,并通过实验展示了如何在R语言中使用相关库进行线性回归分析。" 在统计学和机器学习中,线性回归是一种基本且广泛使用的预测模型,主要用于研究因变量与一个或多个自变量之间的线性关系。在线性回归中,我们寻找最佳拟合直线,这条直线能够尽可能地贴近所有数据点,从而对未知数据进行预测。在给定的描述中,提到了通过诊断图来检查线性回归模型的性能,这是评估模型是否合适的重要步骤。 线性回归模型通常基于最小二乘原则,目标是最小化预测值与真实值之间的残差平方和。在R语言中,基础配置包含了实现线性回归的基本函数,但对于更复杂的功能,可能需要额外安装像`MASS`和`ISLR`这样的库。这些库提供了更多的数据集和分析工具,如`ISLR`库中的`Boston`数据集,它包含506个样本,每个样本有13个特征,用于预测房价中位数。 描述中提到的问题是,当数据分布于高维度空间时,会出现所谓的“维度灾难”。在高维空间中,数据点会变得稀疏,导致每个观测点的近邻可能距离很远,这对于依赖近邻的非参数方法如KNN来说,预测效果会显著下降。相比之下,参数化方法如线性回归在每个预测变量有少量观测时往往表现更好,因为它们通过系数来捕获变量间的关系,即使在低维度问题上,也具有更好的可解释性。 在选择模型时,如果线性回归和KNN的测试集均方误差(MSE)相差不大,通常会选择线性回归,因为它提供了一个简洁的模型,可以通过系数的p值来评估其显著性,这在解释模型结果和理解变量影响时非常有价值。 在R语言中,执行线性回归分析可以使用`lm()`函数,对于`Boston`数据集,我们可以构建模型来预测房价,如`lm(medv ~ ., data = Boston)`,这里`.`代表使用所有其他列作为预测变量。如果需要安装新的库,可以使用`install.packages()`函数,例如`install.packages("ISLR")`。 线性回归是一种强大的工具,尤其在理解和预测变量间线性关系时。但在处理高维数据时,需要考虑其局限性,并可能需要结合其他方法,如降维技术或选择合适的非参数方法。

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 上传