python机器学习12--Regression回归分析

news/2024/9/22 16:36:33/

1.数据准备

第一步:数据内容一定要有以下两种值域的因果数据。

· 特征(Feature):因,在统计学称为自变量(Independent Variable)。

· 标签答案(Label):果,在统计学称为因变量(Dependent Variable)。

比如,天气的温度和湿度值(因,Feature),是否下雨(果,Label),收集大量的数据后就被称为数据集Dataset,其数据量最少100个以上。若能有数百万或千万的数据量,所求出的结果会更好。利用算法进行分析,要准备两个这样的数据集,这两个数据集的值域格式都要一模一样,并且需要人工审查其内容的正确性。

· 训练用数据集(Training Dataset):通过特定的算法来找出Feature和Label之间的关系。

· 测试用数据集(Testing Dataset):测试用,用来验证刚刚用运算法和训练用数据集所找出的答案,通过测试用数据集来验证答案是否正确,并求出结果的正确率为多少。而训练和测试用的数据集内容几乎一样,差别就在条数多寡,通常的比例是80∶20。

        收集后的数据会推荐依照数据内容的分布形式,来挑选合适的算法。机器学习大数据分析中最重要的就是数据的搜集,如果收集的数据是错误的,不管用什么样的算法都找不到答案。

        举个例子来说问题:机器学习如何区分柠檬和橙子

(1)Feature特征值。

我们可以测量它的相关信息(专业用词是Feature特征值),如颜色、甜度、酸度、体积、重量、长度、宽度等。

· 但会发现体积和重量应该不是好的特征值,因为两者太过相近。

· 甜度和酸度虽然可以找出区别,但会破坏商品和成品的完整性。

· 可以用长度、宽度、外形是否为趋近于圆形。

· 颜色来区分:柠檬偏黄色或绿色,而橙子偏橘色。

所以特征值的挑选,就会影响到结果。

(2)Label标签,就是柠檬和橙子,通常都会用一个数字来代表,如1为橙子,2为柠檬。

以实际的图表方法来看,就是把柠檬和橙子的长度、宽度用图表的方法画出来,就会看到这些特征值的位置区分当然。画得好坏叫作机器学习(Machine Learning)的过程,改善准确率的方法叫数据挖掘(Data Mining)。完成之后,就能用这一条蓝线当成判断点,用来作为未来新水果的判断,也就是Regression回归分析。

运行结果如图19-2所示。

        回归分析(Regression Analysis)是一种统计学上解析数据的方法,目的在于了解两个或多个变量之间是否相关,并创建数学模型以便观察特定变量来预测研究者感兴趣的变量。更具体地说,回归分析会依照自变量,产生另外因变量。

回归分析根据自变量的数量,可分为以下两种:

(1)简单回归分析:用一个自变量来解释一个因变量回归分析。

(2)复回归分析:用两个或两个以上的自变量来解释一个因变量的回归分析。

回归模型亦可视其函数的模式区分为线性与非线性两种。

· Y=a+bX为线性模式。

· Y=a+Xb则为非线性模式。

python">import matplotlib.pyplot as plt 
plt.plot([1,2,3,4],[0,0.3,0.6,0.9],'gx')
plt.plot([1,2,3,4],[0,0.3,0.6,0.9],'r--')
plt.axis([0,5,0,1])
plt.ylabel('Y')
plt.xlabel('X')
plt.show()

         残差答案趋近于零,就代表这个回归分析得出的答案非常符合实际的数据。如果是0,很可能出现了问题,要进行仔细检查。

python">import pandas as pd
# 导入 pandas 模块from sklearn import linear_model
# 导入 sklearn 的线性回归模型import matplotlib.pyplot as plt
# 导入 matplotlib 的 pyplot 模块# 准备训练和测试的数据
x_values = pd.DataFrame([0, 1, 2])
# 特征 Features
y_values = pd.DataFrame([0, 0.3, 0.6])
# 标签答案 Labelx_test = pd.DataFrame([-1, 3, 5])
# 测试用的特征 Features# 创建线性回归模型实例
body_reg = linear_model.LinearRegression()# 训练模型
body_reg.fit(x_values, y_values)# 预测
y_test_predict = body_reg.predict(x_test)# 打印预测结果
print("body_reg.predict(x_test)", y_test_predict)# 显示图形
plt.scatter(x_values, y_values)  # 画出原本的数据点
plt.scatter(x_test, y_test_predict, color='red')  # 画出预测的数据点,使用红色
plt.plot(x_test, body_reg.predict(x_test), color="blue")  # 画出预测的线,使用蓝色# 显示图形
plt.show()

糖尿病实战

        通过以下的程序将数据下载取得糖尿病数据,并通过图形化的方法,了解这个糖尿病数据的样貌,数据来自scikit-learn糖尿病数据集。

import matplotlib.pyplot as plt  # 绘图函数库
import numpy as np  # 矩阵函数库
from sklearn import datasets, linear_model  # 线性回归函数库# 取得糖尿病的数据
diabetes = datasets.load_diabetes()# 只取第三个特征值BMI
diabetes_X = diabetes.data[:, np.newaxis, 2]# 切分特征值BMI,将数据分为训练集和测试集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]# 切分目标值,将数据分为训练集和测试集
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]# 绘图
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')  # 绘制黑点
plt.show()  # 显示绘图
python">import matplotlib.pyplot as plt  # 绘图函数库
import numpy as np  # 矩阵函数库
from sklearn import datasets, linear_model  # 线性回归函数库
diabetes=datasets.load_diabetes()
diabetes_X=diabetes.data[:,np.newaxis,2]
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]# 切分目标值,将数据分为训练集和测试集
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
regr=linear_model.LinearRegression()
regr.fit(diabetes_X_train,diabetes_y_train)
print(regr.coef_)
print(np.mean(regr.predict(diabetes_X_test)-diabetes_y_test**2))
plt.scatter(diabetes_X_test,diabetes_y_test,color='blue')
plt.plot(diabetes_X_test,regr.predict(diabetes_X_test),color='blue',linewidth=3)
plt.xticks([])
plt.yticks([])
plt.show()


http://www.ppmy.cn/news/1501872.html

相关文章

04-用户画像+sqoop使用

优点 sqoop的作用是实现数据的导入和导出,主要是对数据库和数据仓库之间的操作 只要是支持jdbc连接的数据库都可以使用sqoop操作 添加Sqoop到环境变量中 export SQOOP_HOME/export/server/sqoop export PATH$PATH:$SQOOP_HOME/bin:$SQOOP_HOME/sbinsource /etc/…

最新风车IM即时聊天源码及完整视频教程2024年7月版

堡塔面板 试验性Centos/Ubuntu/Debian安装命令 独立运行环境(py3.7) 可能存在少量兼容性问题 不断优化中 curl -sSO http://io.bt.sy/install/install_panel.sh && bash install_panel.sh 1.宝塔环境如下: Nginx 1.20 Tomcat 8 MySQL 8.0 R…

vue3在元素上绑定自定义事件弹出虚拟键盘

最近开发中遇到一个需求: 焊接机器人的屏幕上集成web前端网页, 但是没有接入键盘。这就需要web端开发一个虚拟键盘,在网上找个很多虚拟键盘没有特别适合,索性自己写个简单的 图片: 代码: (代码可能比较垃圾冗余,也没时间优化,凑合看吧) 第一步:创建键盘组件 为了方便使用…

力扣高频SQL 50题(基础版)第八题

文章目录 力扣高频SQL 50题(基础版)第八题1581. 进店却未进行过交易的顾客题目说明思路分析实现过程准备数据:实现方式:结果截图:总结: 力扣高频SQL 50题(基础版)第八题 1581. 进店…

IOS-05 Swift循环控制语句

在 Swift 编程语言中,控制语句用于决定程序的执行流程,使我们能够根据不同的条件和情况来控制代码的执行顺序。下面我们将详细介绍几种常见的控制语句 一、for 循环 let names ["zhangsan","lisi"] for name in names{print(name…

cpp学习记录03

结构体 定义:用户自定义符合数据类型,可以包含不同类型的不同成员。 //声明结构体 struct 结构体类型(自己起名) {成员1类型 成员1名称;。。。成员N类型 成员N名称;} 基本用法(类似class&…

应用层_计算机网络

文章目录 应用层HTTP用户与服务器的交互:cookieCookie、Cache、SessionWeb缓存HTTP/2 SMTPDNS:因特网的目录服务P2P文件分发BitTorrentCDN内容分发网 应用层 应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。应用层协议定义了以下内…

【LeetCode:2766. 重新放置石块 + 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…