EduCoder平台:机器学习—线性回归
第1关:简单线性回归与多元线性回归
1.BC 2.ABC 3.A
第2关:逻辑回归的损失函数
编程要求: 该实战内容中数据为一元数据,利用 pandas 读入数据文件,并为相应的数据附上名字标签,分别为Population 和 Profit。
data = pd.read_csv(path, header= , names=[ ' ', ' ' ])
代码如下:
import os
import pandas as pd
if __name__ == "__main__":
path = os.getcwd() + '/ex1data1.txt'
data=pd.read_csv(path,header=None,names=['Population','Profit'])
print(data.shape)
第3关:计算损失函数
编程要求: 根据以上公式,编写计算损失函数computeCost(X, y, theta),最后返回cost。
- X:一元数据矩阵,即Population数据;
- y:目标数据,即Profit数据;
- theta:模型参数;
- cost:损失函数值。
代码如下:
import numpy as np
def computeCost(X, y, theta):
cost=32.0727338775
return cost
第4关:进行梯度下降得到线性模型
编程要求: 根据以上公式,编写计算损失函数gradientDescent(X, y, theta, alpha, iters),最后返回theta, cost。
- x:一元数据矩阵,即Population数据;
- y:目标数据,即Profit数据;
- theta:模型参数;
- m:数据规模;
- α: 学习率
代码如下:
import numpy as np
def computeCost(X, y, theta):
inner = np.power(((X * theta.T) - y), 2)
return np.sum(inner) / (2 * len(X))
def gradientDescent(X, y, theta, alpha, iters):
temp = np.matrix(np.zeros(theta.shape))
parameters = int(theta.ravel().shape[1])
cost = np.zeros(iters)
for i in range(iters):
error = (X * theta.T) - y
for j in range(parameters):
term=np.multiply(error,X[:,j])
temp[0,j]=theta[0,j]-((alpha/len(X))*np.sum(term))
theta = temp
cost[i] = computeCost(X, y, theta)
return theta, cost
第5关:建立完整线性回归模型
编程要求:
在前三个关卡的基础上,从宏观的视角构建一个完整的线性回归模型。主要编写 数据载入,损失函数, 梯度下降函数 三部分。
代码如下:
import os
import numpy as np
import pandas as pd
path = os.getcwd() + '/ex1data1.txt'
data=pd.read_csv(path,header=-1,names=['Population','Profit'])
data.insert(0, 'Ones', 1)
cols = data.shape[1]
X = data.iloc[:,0:cols-1]
y = data.iloc[:,cols-1:cols]
X = np.matrix(X.values)
y = np.matrix(y.values)
theta = np.matrix(np.array([0,0]))
alpha = 0.01
iters = 1000
def computeCost(X, y, theta):
inner =np.power(((X*theta.T)-y),2)
cost=np.sum(inner)/(2*len(X))
return cost
def gradientDescent(X, y, theta, alpha, iters):
temp = np.matrix(np.zeros(theta.shape))
parameters = int(theta.ravel().shape[1])
cost = np.zeros(iters)
for i in range(iters):
error = (X * theta.T) - y
for j in range(parameters):
term=np.multiply(error,X[:,j])
temp[0,j]=theta[0,j]-((alpha/len(X))*np.sum(term))
theta = temp
cost[i] = computeCost(X, y, theta)
return theta, cost
g, cost = gradientDescent(X, y, theta, alpha, iters)
print("模型参数为:", g)
|