机器学习定义

机器学习是一个源于数据的模型的训练过程,最终归纳出一个面向一种性能度量的决策。

机器学习步骤

提出问题

理解数据

数据清洗

构建模型

评估

案例: 学习时间与考试分数之间的相关性

1,问题:学习时间与考试分数之间的相关性

2,理解数据

导入数据集

#导入包
from collections import OrderedDict
import pandas as pd
#数据集
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]
}
examOrderDict=OrderedDict(examDict)
examDf=pd.DataFrame(examOrderDict)
examDf
获取数据描述统计信息
examDf.describe()
examDf.shape
绘制散点图
#绘制散点图
import matplotlib.pyplot as plt
exam_X=examDf.loc[:,'学习时间']
exam_y=examDf.loc[:,'分数']
#散点图
plt.scatter(exam_X,exam_y,color='b',label='exam data')
#添加图标标签
plt.xlabel('Hours')
plt.ylabel('Score')
#显示图片
plt.show()
rDf=examDf.corr()
print('相关系数矩阵:')
rDf
构建模型
#Linear Regression in python
from sklearn import linear_model
reg=linear_model.LinearRegression()
reg.fit([[0,0],[1,1],[2,2]],[0,1,2])
reg.coef_
查看数据
examDf.head()
提取特征标签
#提取特征和标签
#特征features
exam_X=examDf.loc[:,'学习时间']
exam_y=examDf.loc[:,'分数']
导入数据
from sklearn.cross_validation import train_test_split
#建立训练数据和测试数据
X_train,X_test,y_train,y_test=train_test_split(exam_X, #样本特征
exam_y, #样本标签
train_size= .8) #训练数据占比
#输出数据大小
print('原始数据特征:',exam_X.shape,
'训练数据特征:',X_train.shape,
'测试数据特征:',X_test.shape)
print('原始数据标签:',exam_y.shape,
'训练数据标签:',y_train.shape,
 '测试数据标签:',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()
构建模型 :训练数据80% ——输出模型
测试数据20% ——评估模型准确率
#将训练数据特征转换成二维数组XX行*1列
X_train=X_train.reshape(-1,1)
#将测试数据特征转换成二维数组行数*1列
X_test=X_test.reshape(-1,1)
#训练模型
#第一步:导入线性回归
from sklearn.linear_model import LinearRegression
#第二步:创建模型:线性回归
model=LinearRegression()
#第三步:训练模型
model.fit(X_train,y_train)
'''
最佳拟合线:
y=a+bx
截距intercept:a
回归系数:b
'''
#截距
a=model.intercept_
#回归系数
b=model.coef_
print('最佳拟合线:截距a=',a,'回归系数b=',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()
评估
#评估模型:决定系数R平方
model.score(X_test,y_test)
总结果可视化
#绘图
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')
#绘制最佳拟合
y_train_pred=model.predict(X_train)
plt.plot(X_train,y_train_pred,color='black',label='best line')
#添加标签
plt.legend(loc=2)
plt.xlabel('Hours')
plt.ylabel('Score')
#显示图片
plt.show()

结论:学习时间与分数成正相关关系。学习时间越长,分数越高。

统计知识点解析:

1、单变量数据与二变量数据

单变量数据:只考虑一个单一变量的频数或概率。

二变量数据:考虑两个变量数值,并给出两变量间关系。

二变量数据可视化:散点图(Scatter)

2、相关与回归

3种线性相关:正线性相关、负线性相关、不相关

3,误差平方和和协方差

误差平方和:Y的实际值以及通过最佳拟合线得出的预测值之间的差值

公式:SSE=∑(y-^y)² 近似方差

协方差:协方差用于衡量两个变量的总体误差

公式:

4、最佳拟合线

定义:使样本点到该直线的离差平方和达到最小的直线

公式:y=a+bx (回归线)

b=∑(x- ¯x)(y- ¯y)/∑(x- ¯x)²

a=¯y-b¯x

5、相关系数

定义:计算直线拟合度


功能:

1)两个变量的相关方向 正:朝上 负:朝下

2)相关性大小表示两个变量每单位的相关程度