数据分析一般分为探索性数据分析、验证型数据分析和预测型数据分析。上一篇讲了如何用Python实现验证型数据分析(假设检验),文章链接:转变:用Python如何实现“假设检验”zhuanlan.zhihu.com
本文对Python进行预测型数据分析用到的基本机器学习算法和流程进行了简要总结。
预测型数据分析用到的基本机器学习算法思维导图:
本文采用鸢尾花数据集进行预测型数据分析算法实践
导入鸢尾花数据集
import pandas as pd
iris = pd.read_csv('iris.csv')
iris.sample(5)
import seaborn as sns
%matplotlib inline
sns.regplot(x='petal_length', y='petal_width',data=iris)
#花瓣长度、花瓣宽度线性回归拟合图
1. 线性回归
目标变量y是一个数值连续型变量
单个特征构造模型
# scikit-learn 常用机器学习库 简写 sklearn
#利用花瓣长度预测花瓣宽度
from sklearn import linear_model
lm=linear_model.LinearRegression()
features=['petal_length']
X = iris[features]
y = iris['petal_width']
print(X.shape,y.shape)
model = lm.fit(X,y)
print(model.intercept_, model.coef_)
# y= -0.36 + 0.416*x
(150, 1) (150,)
-0.36651404521672704 [0.41641913]
model.predict(4)
array([1.29916248])
交叉检验评估模型
from sklearn.model_selection import cross_val_score
#线性回归打分函数(分数越高,性能越好)
#neg_mean_absolute_error 是 y-y'的绝对值和的平均
#neg_mean_squared_error 是 (y-y')平方和的平均
# cv = 5 表示 5次交叉检验 (常用5次)
#误差函数越大,模型越不好,所以Python自动在前面加 - 号, 越大表示误差越小,模型越好
scores = -cross_val_score(lm, X, y, cv=5, scoring='neg_mean_absolute_error')
print(scores)
#得到 5次交叉检验的绝对值误差
[0.08581817 0.09533821 0.13792154 0.2074044 0.29904645]
#一般用5次的平均值作为衡量模型好坏的指标
import numpy as np
print(np.mean(scores))
0.1651057510041143
scores = - cross_val_score(lm, X, y, cv=5, scoring='neg_mean_squared_error')
print(np.mean(scores))
0.04548097902618274
多个特征构造模型
#两个特征构造模型
features=['petal_length','sepal_length']
X = iris[features]
y = iris['petal_width']
# print(X.shape,y.shape)
model = lm.fit(X,y)
print(model.intercept_, model.coef_)
-0.013852011013002707 [ 0.44992999 -0.08190841]
#评估模型
scores = - cross_val_score(lm, X, y, cv=5, scoring='neg_mean_squared_error')
print(np.mean(scores))
0.0460189525758428
加入花萼长度特征预测花瓣宽度,误差为0.0460,比单独用花瓣长度预测花瓣宽度得到模型的误差0.0454还大 说明没有单独用花瓣长度预测花瓣宽度更合适
#三个特征构造模型并评估模型
features=['petal_length','sepal_length','sepal_width']
X = iris[features]
y = iris['petal_width']</