矩阵和向量的Numpy

numpy narray类用于表示矩阵和向量。为了在numpy中构造一个矩阵,我们将矩阵的行列在一个列表中,并将该列表传递给numpy数组构造函数。

例如,构造与矩阵对应的numpy数组

我们会这样做

A = np.array([[1,-1,2],[3,2,0]])

向量就是只有一列的数组。例如,构造一个向量

我们会这样做

V = np.array([[2],[1],[3]])

更方便的方法是对相应的行向量进行转置。例如,要得到上面的向量我们可以把行向量转置

它的代码是

V = np.转置(np.array([[2,1,3]])))

Numpy重载数组索引和切片符号来访问矩阵的部分。例如,要打印矩阵A中右下角的元素,我们要这样做

打印([1,2])

把矩阵A的第二列切出来

col = A[:,1:2]

第一个切片选择A中的赢博体育行,而第二个切片只选择每行中的中间项。

要进行矩阵乘法或矩阵-向量乘法,我们使用np.dot()方法。

w = np.dot(A,v)

用numpy求解方程组

线性代数中比较常见的问题之一是求解矩阵-向量方程。这里有一个例子。求解方程的向量x

A x = b

我们从构造A和b的数组开始。

= np.array ([[2 1 2], [3, 0, 1], [1, 1, 1]]) b = np.transpose (np.array([[3、5、2]])

来解这个方程组

x = np. linag .solve(A,b)

赢博体育:多元线性回归

在多元回归问题中,我们寻求一个可以将输入数据点映射到结果值的函数。每个数据点是一个特征向量(x1, x2,…,xm),由两个或多个数据值组成,这些数据值捕获输入的各种特征。为了表示赢博体育的输入数据以及输出值的向量,我们设置了一个输入矩阵X和一个输出向量y:

在一个简单的最小二乘线性回归模型中,我们寻找一个向量β,使乘积Xβ最接近结果向量y。

一旦我们构建了β向量,我们就可以使用它将输入数据映射到预测结果。给定一个输入向量,形式为

我们可以计算一个预测的结果值

计算β向量的公式是

β = (XT X)-1 XT y

在下一个示例程序中,我将使用numpy构造适当的矩阵和向量,并求解β向量。一旦我们解决了β,我们将使用它来预测一些我们最初在输入数据集中遗漏的测试数据点。

假设我们已经在numpy中构造了输入矩阵X和结果向量y,下面的代码将计算β向量:

Xt = np。转置(X) XtX = np。dot(Xt,X) Xty = np。dot(Xt,y) beta = np。linalg.solve(XtX,Xty)

最后一行使用np. linag .solve来计算β,因为方程

β = (XT X)-1 XT y

在数学上是否等同于方程组

(XT X) β = XT y

我将在本例中使用的数据集是温莎房价数据集,其中包含有关安大略省温莎地区房屋销售的信息。输入变量涵盖了一系列可能对房价产生潜在影响的因素,如地块大小、卧室数量和各种设施的存在。包含完整数据集的CSV文件可在此处获得。我从这个网站下载了数据集,它提供了大量的数据集,涵盖了广泛的主题。

下面是示例程序的源代码。

import csv import numpy as np def readData(): X = [] y = [] with open(' house .csv') as f: rdr = csv.reader(f) #跳过下一行(rdr) #读取rdr中的X和y: xline = [1.0] for sin line[:-1]:xline.append(浮动(s)) X.append(参照线)y.append(浮动([1])行)返回(X, y) X0, y0 = readData() #转换赢博体育但过去10行numpy原始数据的数组d = len (X0) -10 X = np.array (X0 [d]): y = np.transpose (np.array ([y0 [: d]])) #计算βXt = np.transpose (X) XtX = np.dot (Xt, X) Xty = np.dot (Xt, y)β= np.linalg.solve (XtX Xty)打印(β)#作出预测过去10行数据集的数据,实际在zip (X0 [d:], y0 [d:]):X = np.array([data]) forecast = np.dot(X,beta) print('prediction = '+str(prediction[0,0])+' actual = '+str(actual))

原始数据集包含500多个条目。为了检验线性回归模型预测的准确性,我们使用了除最后10个数据项外的赢博体育数据项来构建回归模型并计算β。一旦我们构建了β向量,我们就用它来预测最后10个输入值,然后将预测的房价与数据集中的实际房价进行比较。

下面是程序产生的输出:

[[-4.14106096 e + 03] [3.55197583 e + 00] [1.66328263 e + 03] [1.45465644 e + 04] [6.77755381 e + 03] [6.58750520 e + 03] [4.44683380 e + 03] [5.60834856 e + 03] [1.27979572 e + 04] [1.24091640 e + 04] [4.19931185 e + 03] [9.42215457 e + 03]]预测实际预测实际= 97360.6550969 = 82500.0 = 71774.1659014 = 83000.0预测实际预测实际= 92359.0891976 = 84000.0 = 77748.2742379 = 85000.0预测实际预测实际= 91015.5903066 = 85000.0 = 97545.1179047 = 91500.0预测=预测= 106006.800756实际= 103000.0预测= 92451.6931269实际= 105000.0预测= 73458.2949381实际= 105000.0

总的来说,这些预测并不是特别好,但其中一些预测在某种程度上接近于正确。从这些数据中做出更好的预测将是冬季学期机器学习教程的主题。