机器学习:8.机器学习-线性回归

第1关:简单线性回归与多元线性回归

1、下面属于多元线性回归的是?
A、求得正方形面积与对角线之间的关系。
B、建立股票价格与成交量、换手率等因素之间的线性关系。
C、建立西瓜价格与西瓜大小、西瓜产地、甜度等因素之间的线性关系。
D、建立西瓜书销量与时间之间的线性关系。

B C

2、若线性回归方程得到多个解,下面哪些方法能够解决此问题?
A、获取更多的训练样本
B、选取样本有效的特征,使样本数量大于特征数
C、加入正则化项
D、不考虑偏置项b

A B C

3、下列关于线性回归分析中的残差(预测值减去真实值)说法正确的是?
A、残差均值总是为零
B、残差均值总是小于零
C、残差均值总是大于零
D、以上说法都不对

A

第2关:数据载入与分析

#encoding=utf8
import os
import pandas as pd

if __name__ == "__main__":
    path = os.getcwd() + '/ex1data1.txt'
    #利用pandas读入数据data,并将数据属性分别命名为'Population'和'Profit'
    #********* begin *********#
    data = pd.read_csv(path, header=None, names=['Population', 'Profit'])
    #********* end *********#
    print(data.shape)

第3关:计算损失函数

#encoding=utf8
import numpy as np

def computeCost(X, y, theta):
    #根据公式编写损失函数计算函数
    #********* begin *********#
    inner = np.power(((X*theta.T) - y), 2)
    cost = np.sum(inner) / (2 * len(X))
    
    #********* end *********#
    return round(cost,10)

第4关:进行梯度下降得到线性模型

#encoding=utf8
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):
            #********* begin *********#
            term = np.multiply(error, X[:,j])
            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))
            
            #********* end *********#
        theta = temp
        cost[i] = computeCost(X, y, theta)
        
    return theta, cost

第5关:建立完整线性回归模型

#encoding=utf8

import os
import numpy as np
import pandas as pd

#载入数据并进行数据处理
path = os.getcwd() + '/ex1data1.txt'
#********* begin *********#

data = pd.read_csv(path, header = -1, names = ['Population', 'Profit'])
#********* end *********#
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):
    #********* begin *********#
    inner = np.power(((X* theta.T) - y), 2)
    cost = np.sum(inner) /(2* len(X))

    #********* end *********#
    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):
            #********* begin *********#
            term = np.multiply(error, X[:,j])
            temp[0,j] = theta[0,j] - ((alpha / len(X)) * np.sum(term))

            #********* end *********#            
        theta = temp
        cost[i] = computeCost(X, y, theta)        
    return theta, cost

#根据梯度下架算法得到最终线性模型参数
g, cost = gradientDescent(X, y, theta, alpha, iters)

print("模型参数为:", g)

你可能感兴趣的:(机器学习,机器学习,线性回归)