线性回归--代码实现

线性回归 -- 代码实现

线性回归--公式推导

本次使用的数据集介绍:

图片:

线性回归--代码实现

数据集属性名称:

'subject#', 'age', 'sex', 'test_time', 'motor_UPDRS', 'total_UPDRS', 'Jitter(%)', 'Jitter(Abs)', 'Jitter:RAP', 'Jitter:PPQ5', 'Jitter:DDP', 'Shimmer', 'Shimmer(dB)', 'Shimmer:APQ3', 'Shimmer:APQ5', 'Shimmer:APQ11', 'Shimmer:DDA', 'NHR', 'HNR', 'RPDE', 'DFA'

数据集结果名称:

'PPE'

本次使用数据集(点击获取)提取码d7lz

线性回归代码实现:

from xlwings import xrange

import pandas as pd
import numpy as np

trainData = pd.read_csv('../Data/train_2.csv')  #导入训练数据(此处路径为训练数据集所在路径)
testData = pd.read_csv('../Data/test_2.csv')    #导入预测数据(此处路径为预测数据集所在路径)
trainData['one'] = 1    #训练数据增加一列x0 = 1, one为x0列的列名
testData['one'] = 1     #预测数据增加一列x0 = 1
#将训练数据中的属性位置程序排序,使的x0 = 1这一列排在第一列
trainAttrData = trainData[['one', 'subject#', 'age', 'sex', 'test_time', 'motor_UPDRS', 'total_UPDRS',
       'Jitter(%)', 'Jitter(Abs)', 'Jitter:RAP', 'Jitter:PPQ5', 'Jitter:DDP',
       'Shimmer', 'Shimmer(dB)', 'Shimmer:APQ3', 'Shimmer:APQ5',
       'Shimmer:APQ11', 'Shimmer:DDA', 'NHR', 'HNR', 'RPDE', 'DFA']]
#将预测数据中的属性位置程序排序,使的x0 = 1这一列排在第一列
testData = testData[['one', 'subject#', 'age', 'sex', 'test_time', 'motor_UPDRS', 'total_UPDRS',
       'Jitter(%)', 'Jitter(Abs)', 'Jitter:RAP', 'Jitter:PPQ5', 'Jitter:DDP',
       'Shimmer', 'Shimmer(dB)', 'Shimmer:APQ3', 'Shimmer:APQ5',
       'Shimmer:APQ11', 'Shimmer:DDA', 'NHR', 'HNR', 'RPDE', 'DFA']]
trainRltData = trainData[['PPE']]   #取出训练数据的结果
trainNpRltList = trainRltData.values    #将训练数据的结果转化为numpy的array
trainNpAttrList = trainAttrData.values  #将训练数据的属性数据转化为numpy的array
testNpList = testData.values    #将预测数据转化为numpy的array
npList = trainNpAttrList.T.dot(trainNpAttrList) #npList = XT(矩阵的转置) * X (线性回归公式中的一部分)
invNpList = np.linalg.inv(npList)   #invNpList = (XT * X)-1 (npList的逆矩阵)
rltNpList = invNpList.dot(trainNpAttrList.T).dot(trainNpRltList) #rltNpList = ((XT * X)-1) * XT * y(y训练数据的结果数组)
#rltNpList 即为线性回归求得的参数
for i in xrange(len(testData)):
    print(testNpList[i].dot(rltNpList)[0])  #进行预测数据与参数的矩阵运算,得到预测值