Python机器学习(一)
今天数据分析课程开始讲解关于机器学习的知识点了,所以我开始继续给大家更新啦,一方面是自己的课下总结,一方面也希望对各位小码提供帮助。
1.机器学习算法分类
按照目前掌握的机器学习理论,给大家讲解的机器学习理论大概可以分为如下两类:
- 教师指导下的学习——是指数据数据已经有明确分类标签的学习。
- 无教师指导的学习——是指数据未经分类的学习。
教师指导下的学习的目标有两个:分类和回归。无教师指导的学习的目标就是对相关的观测数据进行分组,称为聚类或聚类分析。
2.训练数据和测试数据
教师指导下的学习算法实现中,通常为了验证算法的有效性,我们把数据分为两组,一组用来对算法的各项参数进行求解,称为训练,数据叫训练数据;另外一组用来验证算法的有效性,称为测试,数据叫测试数据。
如果一个算法对训练数据效果比较差,称这个算法
是欠拟合。
如果一个算法对训练数据效果很好,但对测试数据效果很差,称这个算法是过拟合。
如果一个算法对训练数据和测试数据效果都很好,称这个算法是泛化性好。
在数据比较缺少的情况下,为了验证算法的有效性,可以采取交差验证的方法,例如将一个数据集分成随机分成五份,然后将其中的一份作测试集,其余四份作训练集进行训练和测试。
3.线性回归
对于一组数据寻找相互之间线性关系的方法叫线性
回归。例如,一组关于披萨饼的直径与价格关系的数据:
(1)将数据用Python进行可视化操作
#线性回归
import matplotlib.pyplot as plt
x=[[6],[8],[18],[14],[18]]
y=[[7],[9],[15],[17.5],[18]]
plt.rcParams['font.sans-serif']=['SimHei']
plt.plot(x,y,'o')
plt.xlabel("披萨饼直径")
plt.ylabel('披萨饼价钱')
# 出现格
plt.grid(True)
plt.show()
运行结果:
(2)用线性回归预测直径12英尺的披萨的价格
# 回归预测
from sklearn.linear_model import LinearRegression
x=[[6],[8],[18],[14],[18]]
y=[[7],[9],[15],[17.5],[18]]
model=LinearRegression()
model.fit(x,y)
price=model.predict([[12]])
print('12英寸披萨饼的价钱预测为:$%0.2f'%price[0][0])
运行结果:
(3)线性回归的线性模型
# 数据预测-线性模型
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
model=LinearRegression()
x=[[6],[8],[18],[14],[18]]
y=[[7],[9],[15],[17.5],[18]]
model.fit(x,y)
x_test=np.linspace(0,20,100).reshape((100,1))
y_test=model.predict(x_test).reshape((100,1))
plt.plot(x,y,'k.')
plt.plot(x_test,y_test,'r-')
plt.xlabel('Diameter in pizza')
plt.ylabel('Price in pizza')
plt.grid(True)
plt.axis([0,20,0,20])
plt.show()
(4)用R方对模型进行评估
R 方测量了一个模型的预测值对响应变量好坏度,通常
它的值在 0 和 1 之间,值越大说明模型越好。
from sklearn.linear_model import LinearRegression
import numpy as np
model=LinearRegression()
x=np.array([[6],[8],[10],[14],[18]])
y=np.array([[7],[9],[13],[17.5],[18]])
model.fit(x,y)
x_test=np.array([[8],[9],[11],[16],[12]])
y_test=np.array([[11],[8.5],[15],[18],[11]])
y_test=np.reshape(y_test,(np.size(y_test)))
y_pre=model.predict(x_test)
y_pre=np.reshape(y_pre,(np.size(y_pre)))
y_mean=np.mean(y_test)
s_tot=np.dot(y_test-y_mean,y_test-y_mean)
s_res=np.dot(y_test-y_pre,y_test-y_pre)
r2=1-s_res/s_tot
print(r2)
运行结果:
今天就暂且和大家分享这些吧,若上文有错误还望小码们指正。