文章目录
- 机器学习基础
- 回归
- 分类
- 无监督学习
- 使用sklearn构建完整的机器学习项目流程
- 回归
- 线性回归模型
- 线性回归模型的推广
机器学习基础
回归
回归:因变量是连续型变量,如:房价,体重等。
常用数据集:boston(波士顿房价是一个连续型变量)
sklearn中所有内置数据集都封装在datasets对象内: 返回的对象有:
data:特征X的矩阵(ndarray)
target:因变量的向量(ndarray)
feature_names:特征名称(ndarray)
使用:
from sklearn import datasets
boston = datasets.load_boston() # 返回一个类似于字典的类
X = boston.data
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
boston_data.head()
sns.scatterplot(boston_data['NOX'],boston_data['Price'],color="r",alpha=0.6)
plt.title("Price~NOX")
plt.show()
各个特征的相关解释:
CRIM:各城镇的人均犯罪率
ZN:规划地段超过25,000平方英尺的住宅用地比例
INDUS:城镇非零售商业用地比例
CHAS:是否在查尔斯河边(=1是)
NOX:一氧化氮浓度(/千万分之一)
RM:每个住宅的平均房间数
AGE:1940年以前建造的自住房屋的比例
DIS:到波士顿五个就业中心的加权距离
RAD:放射状公路的可达性指数
TAX:全部价值的房产税率(每1万美元)
PTRATIO:按城镇分配的学生与教师比例
B:1000(Bk - 0.63)^2其中Bk是每个城镇的黑人比例
LSTAT:较低地位人口
Price:房价
分类
分类:因变量是离散型变量,如:是否患癌症,西瓜是好瓜还是坏瓜等。
常用数据集:iris
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data
y = iris.target
features = iris.feature_names
iris_data = pd.DataFrame(X,columns=features)
iris_data['target'] = y
iris_data.head()
# 可视化特征
marker = ['s','x','o']
for index,c in enumerate(np.unique(y)):
plt.scatter(x=iris_data.loc[y==c,"sepal length (cm)"],y=iris_data.loc[y==c,"sepal width (cm)"],alpha=0.8,label=c,marker=marker[c])
plt.xlabel("sepal length (cm)")
plt.ylabel("sepal width (cm)")
plt.legend()
plt.show()
不同的颜色和点的样式为一种类型的鸢尾花,一共有三宗,因变量是一个类别变量,因此通过特征预测鸢尾花类别的问题是一个分类问题。
各个特征的相关解释:
sepal length (cm):花萼长度(厘米)
sepal width (cm):花萼宽度(厘米)
petal length (cm):花瓣长度(厘米)
petal width (cm):花瓣宽度(厘米)
无监督学习
构建月牙型非凸集
使用sklearn构建完整的机器学习项目流程
集成的两大主要任务,集成回归和分类问题
步骤:
明确项目任务:回归/分类(建模中很重要,经常不能确定问题到底问的什么)
收集数据集并选择合适的特征。
选择度量模型性能的指标。
选择具体的模型并进行训练以优化模型。
评估模型的性能并调参。
度量模型性能的指标: :
𝑅2决定系数(线性回归常用)
MSE均方误差(常用)
MAE平均绝对误差
解释方差得分
回归
线性回归模型
线性回归(用直线拟合,自变量和因变量是线性相关)
非线性回归(用曲线拟合,自变量和因变量是复杂的关系。例如:深度学习、神经网络)
目标:曲线到数据点的差距最小
1)最小二乘估计
求导计算L(w)函数的最小值(一般用平方求和,不用绝对值,因为类似|x|在零点没办法求导)
2)几何概念
3)概率视角
噪声符合正态分布,Y为正态分布加一个值,所以也符合正态分布
线性回归模型的推广
多项式回归
对于多项式的阶数d不能取过大,一般不大于3或者4,因为d越大,多项式曲线就会越光滑,在X的边界处有异常的波动。(图中的边界处的4阶多项式拟合曲线的置信区间(虚线表示置信区间)明显增大,预测效果的稳定性下降。)
广义可加模型(GAM)
推荐书籍:回归分析(谢宇)、女士品茶(统计学入门)
优点:简单容易操作,能够很自然地推广线性回归模型至非线性模型,使得模型的预测精度有所上升;由于模型本身是可加的,因此GAM还是能像线性回归模型一样把其他因素控制不变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。
缺点:GAM模型会经常忽略一些有意义的交互作用,比如某两个特征共同影响因变量,不过GAM还是能像线性回归一样加入交互项𝑥(𝑖)×𝑥(𝑗)的形式进行建模;但是GAM模型本质上还是一个可加模型,如果我们能摆脱可加性模型形式,可能还会提升模型预测精度。
代码:
#(sklearn没有集成GAM)
from pygam import LinearGAM
gam = LinearGAM().fit(boston_data[boston.feature_names], y)
gam.summary()
决策树模型之回归树
优点:
树模型的解释性强,在解释性方面可能比线性回归还要方便。
树模型更接近人的决策方式。
树模型可以用图来表示,非专业人士也可以轻松解读。
树模型可以直接做定性的特征而不需要像线性回归一样哑元化。
树模型能很好处理缺失值和异常值,对异常值不敏感,但是这个对线性模型来说却是致命的。
树模型的预测准确性一般无法达到其他回归模型的水平(容易过拟合),但是改进的方法很多。
支持向量机回归(SVR)
KKT条件(最优解的一阶必要条件)、对偶理论
不用在每个点都计算误差,存在一些点有噪声,另一个很小区域内的点不计算损失。
极大似然估计
连乘取对数