python计算均方根误差_如何在Python中创建线性回归机器学习模型?「入门篇」
线性回归和逻辑回归是当今很受欢迎的两种机器学习模型。
本文将教你如何使用 scikit-learn 库在Python中创建、训练和测试你的第一个线性、逻辑回归机器学习模型,本文适合大部分的新人小白。
线性回归机器学习模型
1.要使用的数据集
由于线性回归是我们在本文中学习的第一个机器学习模型,因此在本文中,我们将使用人工创建的数据集。这能让你可以更加专注于学习理解机器学习的概念,并避免在清理或处理数据上花费不必要的时间。
更具体地说,我们将使用住房数据的数据集并尝试预测住房价格。在构建模型之前,我们首先需要导入所需的库。
2.需要用到的Python库
我们需要导入的第一个库是 pandas,它是一个“panel data”的组合体,是处理表格数据比较流行的Python库。
一般我们会用pd来命名该库,你可以使用以下语句导入Pandas:
import pandasaspd
接下来,我们需要导入NumPy,这是一个很常用的数值计算库。Numpy以其Numpy数组数据结构以及非常有用的reshee、arange和append而闻名。
一般我们也会用np作为Numpy的别名,你可以使用以下语句进行导入:
import numpyasnp
接下来,我们需要导入matplotlib,这是Python很受欢迎的数据可视化库。
matplotlib通常以别名导入plt。你可以使用以下语句导入:
import matplotlib.pyplotasplt
%matplotlib inline
该%matplotlib inline语句可以将我们的matplotlib可视化直接嵌入到我们的Jupyter Notebook中,更易于访问和解释。
最后,你还要导入seaborn,这是另一个Python数据可视化库,你可以更轻松地使用matplotlib创建漂亮的可视化数据。
你可以使用以下语句导入:
import seabornassns
总结一下,这是本文必需的库的导入:
import pandasaspd
import numpy asnp
import matplotlib.pyplot asplt
%matplotlib inline
import seaborn assns
导入数据集
如前所述,我们将使用住房信息数据集。在下面的URL链接中,有我们的.csv文件数据集:
https://nickmccullum.com/files/Housing_Data.csv
要将数据集导入到Jupyter Notebook中,首先要做的是通过将该URL复制并粘贴到浏览器中来下载文件。然后,将文件移到Jupyter Notebook的目录下。
完成此操作后,以下Python语句可以将住房数据集导入到Jupyter Notebook中:
raw_data = pd.read_csv('Housing_Data.csv')
该数据集具有许多功能,包括:
房屋面积的平均售价
该地区平均客房总数
房子卖出的价格
房子的地址
此数据是随机生成的,因此你会看到一些可能没有意义的细微差别(例如,在应该为整数的数字之后的大量小数位)。
了解数据集
现在已经在raw_data变量下导入了数据集,你可以使用该info方法获取有关数据集的一些高级信息。具体来说,运行raw_data.info()可以得出:
RangeIndex: 5000 entries, 0 to4999
Data columns (total 7 columns):
Avg. Area Income 5000 non-nullfloat64
Avg. Area House Age 5000 non-nullfloat64
Avg. Area NumberofRooms 5000 non-nullfloat64
Avg. Area NumberofBedrooms 5000 non-nullfloat64
Area Population 5000 non-nullfloat64
Price 5000 non-nullfloat64
Address 5000 non-nullobject
dtypes: float64(6), object(1)
memory usage: 273.6+ KB
另一个有用的方法是生成数据。您可以为此使用seaborn方法pairplot,并将整个DataFrame作为参数传递。通过下面的一行代码进行说明:
sns.pairplot(raw_data)
该语句的输出如下:
接下来,让我们开始构建线性回归模型。
建立机器学习线性回归模型
我们需要做的第一件事是将我们的数据分为一个x-array(包含我们将用于进行预测y-array的数据)和一个(包含我们正在尝试进行预测的数据)。
首先,我们应该决定要包括哪些列,你可以使用生成DataFrame列的列表,该列表raw_data.columns输出:
Index(['Avg. Area Income','Avg. Area House Age','Avg. Area Number of Rooms',
'Avg. Area Number of Bedrooms','Area Population','Price','Address'],
dtype='object')
x-array除了价格(因为这是我们要预测的变量)和地址(因为它仅包含文本)之外,我们将在所有这些变量中使用。
让我们创建x-array并将其分配给名为的变量x。
x = raw_data[['Avg. Area Income','Avg. Area House Age','Avg. Area Number of Rooms',
'Avg. Area Number of Bedrooms','Area Population']]
接下来,让我们创建我们的代码y-array并将其分配给名为的变量y。
y = raw_data['Price']
我们已经成功地将数据集划分为和x-array(分别为模型的输入值)和和y-array(分别为模型的输出值)。在下一部分中,我们将学习如何将数据集进一步分为训练数据和测试数据。
将我们的数据集分为训练数据和测试数据
scikit-learn 可以很容易地将我们的数据集分为训练数据和测试数据。为此,我们需要 train_test_split 从中的 model_selection 模块导入函数 scikit-learn。
这是执行此操作的完整代码:
fromsklearn.model_selection import train_test_split
该train_test_split数据接受三个参数:
x-array
y-array
测试数据的期望大小
有了这些参数,该 train_test_split 功能将为我们拆分数据!如果我们想让测试数据占整个数据集的30%,可以使用以下代码:
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3)
让我们解开这里发生的一切。
train_test_split 函数返回长度为4的Python列表,其中列表中的每个项分别是x_train、x_test、y_train和y_test。然后我们使用列表解包将正确的值赋给正确的变量名。
现在我们已经正确地划分了数据集,是时候构建和训练我们的线性回归机器学习模型了。
建立和训练模型
我们需要做的第一件事是从scikit learn导入LinearRegression估计器。下面是Python语句:
fromsklearn.linear_model import LinearRegression
接下来,我们需要创建一个线性回归Python对象的实例。我们将把它赋给一个名为model的变量。下面是代码:
model = LinearRegression()
我们可以使用 scikit-learn 中的 fit 方法在训练数据上训练该模型。
model.fit(x_train, y_train)
我们的模型现已训练完毕,可以使用以下语句检查模型的每个系数:
print(model.coef_)
输出:
[2.16176350e+01 1.65221120e+05 1.21405377e+05 1.31871878e+03
1.52251955e+01]
类似地,下面是如何查看回归方程的截距:
print(model.intercept_)
输出:
-2641372.6673013503
查看系数的更好方法是将它们放在一个数据帧中,可以通过以下语句实现:
pd.DataFrame(model.coef_, x.columns, columns = ['Coeff'])
这种情况下的输出更容易理解:
让我们花点时间来理解这些系数的含义。让我们具体看看面积人口变量,它的系数约为15。
这意味着,如果你保持所有其他变量不变,那么区域人口增加一个单位将导致预测变量(在本例中为价格)增加15个单位。
换言之,某个特定变量上的大系数意味着该变量对您试图预测的变量的值有很大的影响。同样,小值的影响也很小。
现在我们已经生成了我们的第一个机器学习线性回归模型,现在是时候使用该模型从我们的测试数据集进行预测了。
根据我们的模型做出预测
scikit-learn使得从机器学习模型做出预测变得非常容易,我们只需调用前面创建的模型变量的 predict 方法。
因为 predict 变量是用来进行预测的,所以它只接受一个 x-array 参数,它将为我们生成y值!
以下是使用 predict 方法从我们的模型生成预测所需的代码:
predictions = model.predict(x_test)
预测变量保存 x_test 中存储的要素的预测值。 由于我们使用 train_test_split 方法将实际值存储在y_test中,因此我们接下来要做的是将预测数组的值与 y_test 的值进行比较。
这里有一种简单的方法是使用散点图绘制两个数组。 使用 plt.scatter 方法可以轻松构建 matplotlib 散点图。 以下为代码:
plt.scatter(y_test, predictions)
这是代码生成的散点图:
如图所见,我们的预测值非常接近数据集中观测值的实际值。在这个散点图中一条完美的直线表明我们的模型完美地预测了 y-array 的值。
另一种直观评估模型性能的方法是绘制残差,即实际y数组值与预测 y-array 值之间的差异。
使用以下代码语句可以轻松实现:
plt.hist(y_test - predictions)
以下为代码生成的可视化效果:
这是我们的机器学习模型残差的直方图。
你可能会注意到,我们的机器学习模型中的残差似乎呈正态分布。这正好是一个很好的信号!
它表明我们已经选择了适当的模型类型(在这种情况下为线性回归)来根据我们的数据集进行预测。在本课程的后面,我们将详细了解如何确保使用了正确的模型。
测试模型的性能
我们在本课程开始时就了解到,回归机器学习模型使用了三个主要性能指标:
平均绝对误差
均方误差
均方根误差
现在,我们来看看如何为本文中构建的模型计算每个指标。在继续之前,记得在Jupyter Notebook中运行以下import语句:
fromsklearn import metrics
平均绝对误差(MAE)
可以使用以下语句计算Python中的平均绝对误差:
metrics.mean_absolute_error(y_test, predictions)
均方误差(MSE)
同样,你可以使用以下语句在Python中计算均方误差:
metrics.mean_squared_error(y_test, predictions)
均方根误差(RMSE)
与平均绝对误差和均方误差不同,scikit learn实际上没有计算均方根误差的内置方法。
幸运的是,它真的不需要。由于均方根误差只是均方根误差的平方根,因此可以使用NumPy的sqrt方法轻松计算:
np.sqrt(metrics.mean_squared_error(y_test, predictions))
附完整代码
这是此Python线性回归机器学习教程的全部代码。
import pandasaspd
import numpy asnp
import matplotlib.pyplot asplt
import seaborn assns
%matplotlib inline
raw_data = pd.read_csv('Housing_Data.csv')
x = raw_data[['Avg. Area Income','Avg. Area House Age','Avg. Area Number of Rooms',
'Avg. Area Number of Bedrooms','Area Population']]
y = raw_data['Price']
fromsklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3)
fromsklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(x_train, y_train)
print(model.coef_)
print(model.intercept_)
pd.DataFrame(model.coef_, x.columns, columns = ['Coeff'])
predictions = model.predict(x_test)
# plt.scatter(y_test, predictions)
plt.hist(y_test - predictions)
fromsklearn import metrics
metrics.mean_absolute_error(y_test, predictions)
metrics.mean_squared_error(y_test, predictions)
np.sqrt(metrics.mean_squared_error(y_test, predictions))
【编辑推荐】
【责任编辑:华轩 TEL:(010)68476606】
点赞 0
python计算均方根误差_如何在Python中创建线性回归机器学习模型?「入门篇」相关推荐
- html树状图右侧_如何在 Tableau 中创建控制图?
本文作者:Jose Valero 控制图是用于研究流程如何随时间变化,并确定制造或业务流程是否在统计控制状态下的图表. 我相信这对每家公司来说都是一个有益的工具,所以在这篇文章中,我将尝试如何在 Ta ...
- vue 递归创建菜单_如何在Vue中创建类似中等的突出显示菜单
vue 递归创建菜单 by Taha Shashtari 由Taha Shashtari 如何在Vue中创建类似中等的突出显示菜单 (How to Create a Medium-Like Highl ...
- java 运费_如何在Java中创建运费成本计算器
我正在创建计算器来计算运费.代码是这样的:如何在Java中创建运费成本计算器 class ShippingCalc { public static void main(String[] args) { ...
- figma下载_如何在Figma中创建逼真的3D对象
figma下载 by Gbolahan Taoheed Fawale 通过Gbolahan Taoheed Fawale 如何在Figma中创建逼真的3D对象 (How to create reali ...
- 如何在mysql中创建过程_如何在MySQL 中创建存储过程?
问题阐述 自MySQL 5.0 开始,MySQL 就支持存储过程.存储过程是一些被用户定义的SQL 语句集合.一个存储程序是可以被存储在服务器中的一套SQL 语句.存储过程可以被程序.触发器或另一个存 ...
- hive 元数据 自定义_如何在Hive中创建自定义函数UDF及如何直接通过Impala的同步元数据重用UDF的jar文件-阿里云开发者社区...
如何在Hive中创建自定义函数UDF及使用 如何在Impala中使用Hive的自定义函数 UDF函数开发 使用Intellij工具开发Hive的UDF函数,进行编译: 1.使用Intellij工具通过 ...
- wordpress 数据库_如何在WordPress中创建视频库(逐步)
wordpress 数据库 Recently, a user asked us how to create a video gallery in WordPress. WordPress makes ...
- wordpress创建_如何在WordPress中创建问卷(简易方式)
wordpress创建 Do you want to create a questionnaire in WordPress to survey your visitors or collect da ...
- wordpress创建_如何在WordPress中创建子页面
wordpress创建 Do you want to create a child page on your site? Pages in WordPress can be standalone or ...
最新文章
- 大竹中学2021高考成绩查询,四川大竹中学2021录取分数线
- 坑爹的微信支付(签名错误)
- Windows 活动目录(AD)服务器系统升级到2012之升级完成后工作(八)
- Nginx静态资源优化配置之sendfile
- python3.5安装pip_win10上python3.5.2第三方库安装(运用pip)
- java中乐观锁_Java中乐观锁与悲观锁的实现
- Visual C#中父窗口和子窗口之间实现控件互操作
- 九度OJ-1525 子串逆序打印
- flume channel monitor实现源码分析
- java 100个定时任务_Java定时任务解决方案
- win10商店下载位置_Windows10应用商店程序下载目录在哪 怎样查看win10系统应用商店程序下载目录...
- MQTT5协议报文格式
- 计算机审计风险未来发展,浅谈计算机审计风险的研究
- 设计师谈中望CAD2010应用心得 作者:刘国勤
- 思科交换机不同vlan互通
- QTableWidgetItem
- Linux C 函数参考(日期时间) 作者: 出处:hur.cn 更新时间: 2007年01月29日
- python发牌代码十点半_Python制作扑克牌发牌程序,另含大量Python代码!
- 物联网与大数据(三)从大数据看物联网
- mysql group_concat去重_mysql GROUP_CONCAT 函数 将相同的键的多个单元格合并到一个单元格...
热门文章
- 021_html文本格式化标签
- arm linux嵌入式网络控制系统,基于ARM uCLinux的网络控制系统设计与实现
- 计算机是如何按照时钟来顺序工作的
- 更换YUM及升级包方法
- Visual Studio 2017软件安装教程
- 机器学习视觉图像算法工程师--面试笔试--常考知识点乱找总结
- JAVA怎么查找错误,如何调试错误“符号查找错误:未定义符号”
- python2异步编程_python异步编程 (转载)
- vim无法保存退出_180万程序员不知如何退出Vim编辑器...
- double类型怎么取余_数据类型和运算符