黑马程序员---三天快速入门Python机器学习(第三天)(下)

简介: 黑马程序员---三天快速入门Python机器学习(第三天)

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总结


特点分析:采用迭代式算法,直观易懂并且非常实用


缺点:容易收敛到局部最优解(多次聚类)


注意:聚类一般坐在分类之前



目录
相关文章
|
2月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据科学实战:从Pandas到机器学习
Python数据科学实战:从Pandas到机器学习
|
2月前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
116 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
2月前
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
55 0
|
2月前
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
76 0
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
Python在数据科学中的应用:从数据处理到模型训练
Python在数据科学中的应用:从数据处理到模型训练
|
8月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
263 14
|
8月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
151 1
|
8月前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
8月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
373 0
|
8月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
1067 0