3 波士顿房价预测
from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge from sklearn.metrics import mean_squared_error def linner1(): """ 正规方程的优化方法 :return: """ # 1)获取数据 boston = load_boston() # 2)划分数据集 x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22) # 3)标准化 transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # 4)预估器 estimator = LinearRegression() estimator.fit(x_train, y_train) # 5)得出模型 print("正规方程权重系数为:\n", estimator.coef_) print("正规方程偏置为:\n", estimator.intercept_) # 6)模型评估 y_predict = estimator.predict(x_test) print("预测房价:\n", y_predict) error = mean_squared_error(y_test, y_predict) print("正规方程-均分误差为:\n", error) return None def linner2(): """ 梯度下降的优化方法 :return: """ # 1)获取数据 boston = load_boston() print("特征数量:\n", boston.data.shape) # 几个特征对应几个权重系数 # 2)划分数据集 x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22) # 3)标准化 transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # 4)预估器 estimator = SGDRegressor(learning_rate="constant", eta0=0.001, max_iter=10000) estimator.fit(x_train, y_train) # 5)得出模型 print("梯度下降权重系数为:\n", estimator.coef_) print("梯度下降偏置为:\n", estimator.intercept_) # 6)模型评估 y_predict = estimator.predict(x_test) print("预测房价:\n", y_predict) error = mean_squared_error(y_test, y_predict) print("梯度下降-均分误差为:\n", error) return None def linner3(): """ 岭回归 :return: """ # 1)获取数据 boston = load_boston() print("特征数量:\n", boston.data.shape) # 几个特征对应几个权重系数 # 2)划分数据集 x_train, x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=22) # 3)标准化 transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) # 4)预估器 estimator = Ridge(alpha=0.5, max_iter=10000) # 可默认参数 estimator.fit(x_train, y_train) # 5)得出模型 print("岭回归-权重系数为:\n", estimator.coef_) print("岭回归-下降偏置为:\n", estimator.intercept_) # 6)模型评估 y_predict = estimator.predict(x_test) print("预测房价:\n", y_predict) error = mean_squared_error(y_test, y_predict) print("岭回归-均分误差为:\n", error) return None if __name__ == '__main__': linner1() linner2() linner3()
4.4 分类算法–逻辑回归与二分类
学习目标:
- 说明逻辑回归的损失函数
- 说明逻辑回归的优化方法
- 说明sigmoid函数
- 知道逻辑回归的应用场景
- 知道精确率、召回率指标的区别
- 知道F-score指标说明召回率的实际意义
- 说明如何解决样本不均衡情况下的评估
- 了解ROC曲线的意义,说明AUC指标大小
- 应用classificiation_report实现精确率、召回率计算
- 应用roc_auc_score实现指标计算
4.4.1 逻辑回归的应用场景
- 广告点击率:是否会被点击
- 是否为垃圾邮件
- 是否患病
- 金融诈骗
- 虚假账号
- 以上都是二分类(正例,反例),逻辑回归就是解决二分类的利器
4.4.2 逻辑回归的原理
线性回归的输出就是逻辑回归的输入
3 损失以及优化
2 优化
同样使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率
4.4.3 逻辑回归API
sklearn.linear_model.LogisticRefression(solver='liblinear', penalty='l2, C=1.0)
- penalty:正则化种类
- C:正则化力度
- solver:优化求解方式(默认开源的liblinear库实现)
4.4.4 案例:癌症分类预测-良/恶性乳腺癌肿瘤预测
流程分析:
1)获取数据:读取的时候加上names
2)数据处理:处理缺失值
3)数据集划分
4)特征工程:无量纲化处理—标准化
5)逻辑回归预估器
6)模型评估
import pandas as pd import numpy as np # 1、读取数据 path = "https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data" column_name = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape', 'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin', 'Normal Nucleoli', 'Mitoses', 'Class'] data = pd.read_csv(path, names=column_name) #699 rows × 11 columns # 2、缺失值处理 # 1)替换-》np.nan data = data.replace(to_replace="?", value=np.nan) # 2)删除缺失样本 data.dropna(inplace=True) #683 rows × 11 columns # 3、划分数据集 from sklearn.model_selection import train_test_split # 筛选特征值和目标值 x = data.iloc[:, 1:-1] y = data["Class"] x_train, x_test, y_train, y_test = train_test_split(x, y) # 4、标准化 from sklearn.preprocessing import StandardScaler transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) from sklearn.linear_model import LogisticRegression # 5、预估器流程 estimator = LogisticRegression() estimator.fit(x_train, y_train) # 逻辑回归的模型参数:回归系数和偏置 estimator.coef_ # 权重 estimator.intercept_ # 偏置 # 6、模型评估 # 方法1:直接比对真实值和预测值 y_predict = estimator.predict(x_test) print("y_predict:\n", y_predict) print("直接比对真实值和预测值:\n", y_test == y_predict) # 方法2:计算准确率 score = estimator.score(x_test, y_test) print("准确率为:\n", score)
4.4.5 分类的评估方法
1 精确率与召回率
1 混淆矩阵
真的患癌症的,能够被检查出来的概率
2 精确率(Precision)与召回率(Recall)
3 分类评估报告API
sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None)
- y_true:真实目标值
- y_pred:估计器预测目标值
- labels:指定类别对应的数字
- target_names:目标类别名称
- return:每个类别精确率与召回率
# 查看精确率、召回率、F1-score from sklearn.metrics import classification_report report = classification_report(y_test, y_predict, labels=[2, 4], target_names=["良性", "恶性"])
衡量样本不均衡下的评估:
2 ROC曲线与AUC指标
TPR就是召回率
4 AUC计算API
from sklearn.metrics import roc_auc_score roc_auc_score(y_true, y_score)
- y_true:每个样本的真实类别,必须为0(反例)和1(正例)
- y_score:预测得分,可以是正类的估计概率、置信值或者分类器方法的返回值
# y_true:每个样本的真实类别,必须为0(反例),1(正例)标记 # 将y_test 转换成 0 1 y_true = np.where(y_test > 3, 1, 0) from sklearn.metrics import roc_auc_score roc_auc_score(y_true, y_predict)
5 总结
- AUC只能用来评价二分类
- AUC非常适合评价样本在不平衡中的分类器性能
4.5 模型保存和加载
学习目标:
- 应用joblib实现模型的保存于加载
4.5.1 模型的保存和加载API
import joblib
- 保存:joblib.dump(rf, ‘test.pkl’)
- 加载:estimator = joblib.load(‘test.pkl’)
4.5.2 线性回归的模型保存加载案例
1、保存模型
2、加载模型
4.6 无监督学习:K-means算法
学习目标:
- 说明K-means算法原理
- 说明K-means的性能评估标准轮廓系数
- 说明K-means的优缺点
什么是无监督学习
没有目标值(无标签)—无监督学习
4.6.2 无监督学习包含算法
聚类:K-means
降维:PCA
4.6.3 K-means原理
4.6.4 K-means API
sklearn.cluster.KMeans(n_cluster=8, init='k-means++')
- n_clusters:开始聚类中心数量
- init:初始化方法,默认为‘k-means++’
- labels_:默认标记的类型,可以和真实值比较(不是值比较)
from sklearn.cluster import KMeans estimator = KMeans(n_clusters=3) estimator.fit(data_new) y_predict = estimator.predict(data_new)
4.6.5 案例:k-means对instacart Market用户聚类
1 分析
- 1)降维之后的数据
- 2)预估器流程:k-means聚类
- 3)聚类结果显示
- 4)模型评估
4.6.6 K-means性能评估指标
1 轮廓系数
2 轮廓系数值分析
3 结论
4 轮廓系数API
sklearn.metrics.silhouette_score(X, labels)
- 计算所有样本的平均轮廓系数
- X:特征值
- labels:被聚类标记的目标值
from sklearn.metrics import silhouette_score silhouette_score(data_new, y_predict)
4.6.7 K-means总结
特点分析:采用迭代式算法,直观易懂并且非常实用
缺点:容易收敛到局部最优解(多次聚类)
注意:聚类一般坐在分类之前