首先搞清楚两个概念:

特征:数据属性

标签:对数据的预测结果

例如,一首歌的节奏是特征,我喜欢或者不喜欢就是标签

一个橘子的大小,颜色深浅是特征,这个橘子甜不甜就是标签

(网易云音乐的每日推荐就是很好的例子。我们在给喜欢的音乐标上小红心的同时,算法能够通过歌曲的特征以及我们给歌曲打的标签进行相关性的计算,然后精准地给我们推荐我们可能喜欢的音乐。)

线性相关性分为三种:

1.正线性相关

2.负线性相关

3.不是线性相关

那如何衡量相关性呢?

1.协方差

协方差的缺点:两个变量的变化幅度会对协方差造成影响

2.相关系数

相关系数:把变量的变化幅度对协方差造成的影响从协方差中消除(每单位变化的情况)

相关系数是标准化后的协方差

表示两个变量每单位变化的相似程度

R=x和y的协方差/x的标准差*y的标准差(作为文科生真的是理解这些概念都要秃头了,还好万能python能够一个函数就能求出相关系数)

R是从-1到1进行变化的

0-0.3 弱相关

0.3-0.6中等程度相关

0.6-1强相关

用Python计算相关系数corr()

corr返回结果是一个数据框,存放的是相关系数矩阵


相关系数矩阵:用于表示各个变量之间的相关系数

为什么要要相关系数矩阵来表示相关系数?

如果有多个变量存在,那就可以通过相关系数矩阵一眼看出任意两个变量之间的关系

简单线性回归建模-评估模型的过程

如何建立有序的二维数据结构

1.字典是无序的,所以引入一个OrderedDict来让顺序变成有序

2.数据集转成Pandas的DataFrame二维数据结构进行处理

如何实现线性回归

1.提取出特征和标签

提取出某一列:loc (根据索引进行提取)

2.建立训练数据和测试数据

从样本中随机的按比例选取训练数据(train)和测试数据(test):

使用交叉验证(sklearn.model_selection)中的train_test_split

train_test_split三个参数:

第一个参数:所要划分的样本特征

第二个参数:所要划分的标签特征

第三个参数:train_size= (<0的小数:训练数据的占比 >0的整数:样本的数量)

x_train , x_test , y_train , y_test 各分配到一定比例的数据

3.使用训练数据训练模型报错信息:Reshape your data either using array.reshape(-1, 1) if your data has a single feature

注意:sklearn要求输入的特征必须是二维数组的类型,但是因为我们目前只有1个特征,所以需要用安装错误提示用reshape转行成二维数组的类型

在创建DataFrame的时候常常使用reshape来更改数据的列数和行数。

-1在这里应该可以理解为一个正整数通配符,它代替任何正整数

导入线性回归:使用sklearn.linear_model中的LinearRegression

用LinearRegression创建训练模型:model = LinearRegression()

训练模型:用的是fit函数

model.fit(x_train , y_train)

得出最佳拟合线:z=a+bx

a:截距 a=model.intercept_

b:回归系数 b=model.coef_

(最佳拟合线:所有误差值平方和最小)

误差平方和的缺点:数据的多少会对结果有影响

所以评估模型精确度:用决定系数R平方



4.使用测试数据进行模型评估

评估模型准确度 决定系数R平方:score函数

model.score(x_test,y_test)
线性回归代码
#建立有序的二维数据结构
import pandas as pd
from collections import OrderedDict
examDict={
'学习时间':[0.50,0.75,1.00,1.25,1.50,1.75,1.75,2.00,2.25,
2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
'分数': [10, 22, 13, 43, 20, 22, 33, 50, 62,
48, 55, 75, 62, 73, 81, 76, 64, 82, 90, 93]
}
examOrder=OrderedDict(examDict)
examDf=pd.DataFrame(examOrder)
#1.提取出特征和标签
x_exam=examDf.loc[:,"学习时间"]
y_exam=examDf.loc[:,"分数"]
#2.建立训练数据和测试数据
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test= train_test_split(x_exam, y_exam, train_size=0.8)
print(x_exam.shape)
print(y_exam.shape)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)
#绘制所有数据的散点图
import matplotlib.pyplot as plt
plt.scatter(x_train, y_train, color="blue", label="train data")
plt.scatter(x_test, y_test, color="red", label="test data")
plt.legend(loc=2)
plt.xlabel("Hours")
plt.ylabel("Score")
plt.show()
#3.使用训练数据训练模型
x_train=x_train.reshape(-1,1)
y_train=y_train.reshape(-1,1)
from sklearn.linear_model import LinearRegression
model=LinearRegression()
model.fit(x_train,y_train)
#z=a+bx
a=model.intercept_
b=model.coef_
print(a)
print(b)
#绘最佳拟合曲线图
import matplotlib.pyplot as plt
plt.scatter(x_train, y_train, color='blue', label="train data")
y_train_pred = model.predict(x_train)
plt.plot(x_train, y_train_pred, color='black', linewidth=3, label="best line")
plt.legend(loc=2)
plt.xlabel("Hours")
plt.ylabel("Score")
plt.show()
#4.使用测试数据进行模型评估
x_test=x_test.reshape(-1,1)
y_test=y_test.reshape(-1,1)
model.score(x_test,y_test)