【educoder 机器学习】线性回归

线性回归是属于机器学习里面的监督学习,与分类问题不同的是,在回归问题中,其目标是通过对训练样本的学习,得到从样本特征到样本标签直接的映射,其中,在回归问题中,样本的标签是连续值。线性回归是一类重要的回归问题。在线性回归中,目标值与特征直接存在线性关系。

本实训项目的主要内容是基于Python语言搭建出一个线性回归模型,训练出一个能够对房价进行预测的模型。

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

1.B C

第2关:线性回归的正规方程解

任务描述

本关任务:构建线性回归算法,并利用波斯顿房价数据对模型进行训练,然后对未知的房价数据进行预测。

#encoding=utf8 
import numpy as np

def mse_score(y_predict,y_test):
    '''
    input:y_predict(ndarray):预测值
          y_test(ndarray):真实值
    ouput:mse(float):mse损失函数值
       该方法计算损失
    '''
    #********* Begin *********#
    s = np.square(y_test - y_predict).sum()
    m = len(y_test)
    mse = s/m
    #print(mse)
    #********* End *********#
    return mse


class LinearRegression :
    def __init__(self):
        '''初始化线性回归模型'''
        self.w = None
        
    def fit_normal(self,train_data,train_label):
        '''
        input:train_data(ndarray):训练样本
              train_label(ndarray):训练标签
           该方法求解计算self.w的值
        '''
        #********* Begin *********#
        '''将偏置与train_data拼接到一起
        (我们输入特征中并没有那个1,所以我们需要人为的加上去)
        <np.ones()表示生成一个行数与train_data一致,列数等于1且所有元素都是1的矩阵>'''
        x = np.hstack([np.ones((len(train_data),1)), train_data])
        #print(train_data)
        y = train_label
        #print(train_label)
        #用正规方程求解参数
        self.w = np.linalg.inv((x.T).dot(x)).dot((x.T).dot(y))
        #********* End *********#
        return self
    
    def predict(self,test_data):
        '''
        input:test_data(ndarray):测试样本
           该方法对测试样本进行预测
        '''
        #********* Begin *********#
        '''将偏置与test_data拼接到一起
        (我们输入特征中并没有那个1,所以我们需要人为的加上去)
        <np.ones()表示生成一个行数与test_data一致,列数等于1且所有元素都是1的矩阵>'''
        t = np.hstack([np.ones((len(test_data),1)), test_data])
        #根据模型y=wx预测
        pre = t.dot(self.w)
        return pre
        #********* End *********#

第3关:衡量线性回归的性能指标

任务描述

本关任务:根据本关卡所学知识,用Python实现线性回归常用评估指标,并对构造的线性回归模型进行评估。

#encoding=utf8 
import numpy as np


#mse
def mse_score(y_predict,y_test):
    mse = np.mean((y_predict-y_test)**2)
    return mse

#r2
def r2_score(y_predict,y_test):
    '''
    input:y_predict(ndarray):预测值
          y_test(ndarray):真实值
    output:r2(float):r2值
    '''
    #********* Begin *********#
    up = np.square(y_predict - y_test).sum()
    down = np.square(np.mean(y_test) -y_test).sum()
    r2 = 1 - up/down
    #********* End *********#
    return r2


class LinearRegression :
    def __init__(self):
        '''初始化线性回归模型'''
        self.w = None
        
    def fit_normal(self,train_data,train_label):
        '''
        input:train_data(ndarray):训练样本
              train_label(ndarray):训练标签
        '''
        #********* Begin *********#
        x = np.hstack([np.ones((len(train_data),1)),train_data])
        y = train_label
        self.w = np.linalg.inv(x.T.dot(x)).dot(x.T).dot(y)
        #********* End *********#
        return self
    
    def predict(self,test_data):
        '''
        input:test_data(ndarray):测试样本
        '''
        #********* Begin *********#
        x = np.hstack([np.ones((len(test_data),1)),test_data])
        pre = x.dot(self.w)
        return pre
        #********* End *********#

第4关:sklearn中的线性回归

任务描述

本关任务:你需要调用 sklearn 中的线性回归模型,并通过波斯顿房价数据集中房价的13种属性与目标房价对线性回归模型进行训练。我们会调用你训练好的线性回归模型,来对房价进行预测。

#encoding=utf8 

from sklearn.linear_model import LinearRegression

def lr_predict(train_data,train_label,test_data):
    '''
    input:train_data(ndarray):训练样本特征
          train_label(ndarray):训练样本标签
          test_data(ndarray):测试样本特征
    output:predict(ndarray):测试样本预测标签      
    '''
    #********* Begin *********#
    lr = LinearRegression()
    lr.fit(train_data, train_label)
    predict = lr.predict(test_data)
    #********* End *********#
    return predict

猜你喜欢

转载自blog.csdn.net/weixin_44787324/article/details/127570152