第0步:处理数据
用excel打开数据集,绘制散点图,添加趋势线,可以看到学习时间与成绩存在线性相关的关系,用excel中的=intercept, =slope函数可以拟合出斜率和截距。
第1步: 导入数据分析库pandas, 数据可视化库matplotlib
import pandas as pd
import matplotlib.pyplot as plt
# %matplotlib inline 是Ipython的魔法函数,其作用是使matplotlib绘制的图像嵌入在jupyter notebook的单元格里。
%matplotlib inline
第2步: 导入数据集,查看数据集
dataset = pd.read_csv('./studentscores.csv')
dataset.head(10)
执行结果:
Hours | Scores | |
---|---|---|
0 | 2.5 | 21 |
1 | 5.1 | 47 |
2 | 3.2 | 27 |
3 | 8.5 | 75 |
4 | 3.5 | 30 |
5 | 1.5 | 20 |
6 | 9.2 | 88 |
7 | 5.5 | 60 |
8 | 8.3 | 81 |
9 | 2.7 | 25 |
dataset.shape
执行结果:
(25, 2)
dataset.columns
执行结果:
Index(['Hours', 'Scores'], dtype='object')
dataset.info()
执行结果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 25 entries, 0 to 24
Data columns (total 2 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Hours 25 non-null float64
1 Scores 25 non-null int64
dtypes: float64(1), int64(1)
memory usage: 528.0 bytes
dataset.describe()
执行结果:
Hours | Scores | |
---|---|---|
count | 25.000000 | 25.000000 |
mean | 5.012000 | 51.480000 |
std | 2.525094 | 25.286887 |
min | 1.100000 | 17.000000 |
25% | 2.700000 | 30.000000 |
50% | 4.800000 | 47.000000 |
75% | 7.400000 | 75.000000 |
max | 9.200000 | 95.000000 |
第3步: 提取特征
# 提取特征:学习时间
# 提取标签:学习成绩
feature_columns = ['Hours']
label_column = ['Scores']
features = dataset[feature_columns]
label = dataset[label_column]
features.head()
执行结果:
Hours | |
---|---|
0 | 2.5 |
1 | 5.1 |
2 | 3.2 |
3 | 8.5 |
4 | 3.5 |
type(features)
执行结果:
pandas.core.frame.DataFrame
label.head()
执行结果:
Scores | |
---|---|
0 | 21 |
1 | 47 |
2 | 27 |
3 | 75 |
4 | 30 |
X = features.values
Y = label.values
第4步: 建立模型
4.1 拆分数据,四分之三的数据作为训练集,四分之一的数据作为测试集
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 1/4, random_state = 0)
4.2 用训练集的数据进行训练
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)
4.3 对测试集进行预测
Y_pread = regressor.predict(X_test)
4.4 可视化
# 散点图:红色表示训练集的点
plt.scatter(X_train, Y_train, color = 'red')
# 线图:蓝色线表示由训练集训练出来的线性回归模型
plt.plot(X_train, regressor.predict(X_train), color = 'blue')
plt.show()
执行结果:
# 散点图: 红色点表示测试集的点
plt.scatter(X_test, Y_test, color = 'red')
# 线图:蓝色线表示对测试集进行预测的结果
plt.plot(X_test, regressor.predict(X_test), color = 'blue')
plt.show()
执行结果: