Python 机器学习(Machine Learning)入门篇(sklearn), 代码详解

该项目比较适合初学者了解机器学习的原理和一些实践, 代码主要借鉴于黑马程序员, 纯自己手打, 有很多自己的理解

python文件大致如下: 附上百度网盘连接

链接:https://pan.baidu.com/s/1uYkjcL6xa2xmPC9HK_TpDg 
提取码:a2th

不需要下载积分, 只希望如果有用的话大家多评论和发表看法, 多点赞, 谢谢大家

下面是部分截图内容和大致文件格式

注:(已经下载好数据集, 不需要自己去找数据了, 方便了不少, 能直接使用)

代码都有注释

下面附上一小部分代码:

线性回归:

# 线性模型包括线性关系和非线性关系两种
# 线性模型包括参数一次幂和自变量一次幂
# 线性关系一定是线性模型, 反之不一定
# 优化方法有两种: 一种是正规方程, 第二种是梯度下降

# 这部分用来训练预测房价
from sklearn.linear_model import LinearRegression, SGDRegressor, Ridge, RidgeCV
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error  # 均方误差
"""
Author: Siliang Liu
15/08/2020
Reference itheima.com
"""


def load_data():
    boston_data = load_boston()
    print("特征数量为:(样本数,特征数)", boston_data.data.shape)
    x_train, x_test, y_train, y_test = train_test_split(boston_data.data,
                                                        boston_data.target, random_state=22)
    return x_train, x_test, y_train, y_test


# 正规方程
def linear_Regression():
    """
    正规方程的优化方法
    不能解决拟合问题
    一次性求解
    针对小数据
    :return:
    """
    x_train, x_test, y_train, y_test = load_data()
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    estimator = LinearRegression()
    estimator.fit(x_train, y_train)

    print("正规方程_权重系数为: ", estimator.coef_)
    print("正规方程_偏置为:", estimator.intercept_)

    y_predict = estimator.predict(x_test)
    error = mean_squared_error(y_test, y_predict)
    print("正规方程_房价预测:", y_predict)
    print("正规方程_均分误差:", error)
    return None


# 梯度下降
def linear_SGDRegressor():
    """
    梯度下降的优化方法
    迭代求解
    针对大数据
    :return:
    """
    x_train, x_test, y_train, y_test = load_data()
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 建议看下这个函数的api, 这些值都是默认值
    # estimator = SGDRegressor(loss="squared_loss", fit_intercept=True, eta0=0.01,
    #                          power_t=0.25)

    estimator = SGDRegressor(learning_rate="constant", eta0=0.01, max_iter=10000)
    # estimator = SGDRegressor(penalty='l2', loss="squared_loss")  # 这样设置就相当于岭回归, 但是建议用Ridge方法
    estimator.fit(x_train, y_train)

    print("梯度下降_权重系数为: ", estimator.coef_)
    print("梯度下降_偏置为:", estimator.intercept_)

    y_predict = estimator.predict(x_test)
    error = mean_squared_error(y_test, y_predict)
    print("梯度下降_房价预测:", y_predict)
    print("梯度下降_均分误差:", error)

    return None


def linear_Ridge():
    """
    Ridge: 岭回归方法
    :return:
    """
    x_train, x_test, y_train, y_test = load_data()
    transfer = StandardScaler()  # 建议使用标准化处理数据
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    estimator = Ridge(max_iter=10000, alpha=0.5)  # 岭回归
    # estimator = RidgeCV(alphas=[0.1, 0.2, 0.3, 0.5])  # 加了交叉验证的岭回归
    estimator.fit(x_train, y_train)

    print("岭回归_权重系数为: ", estimator.coef_)
    print("岭回归_偏置为:", estimator.intercept_)

    y_predict = estimator.predict(x_test)
    error = mean_squared_error(y_test, y_predict)
    print("岭回归_房价预测:", y_predict)
    print("岭回归_均分误差:", error)

    return None


if __name__ == '__main__':
    linear_Regression()
    linear_SGDRegressor()
    linear_Ridge()

逻辑回归:

# 逻辑回归一般是二分类问题
"""
这一部分用逻辑回归来分类breast是否良性
这里需要注意的有一下:
    LogisticRegression方法相当于SGDClassifier(loss="log",penalty=" ")
    SGDClassifier实现了一个普通的随机梯度下降学习,
    也支持平均梯度下降ASGD, 可以设置average=True来开启
"""
from sklearn.linear_model import LogisticRegression, SGDClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report, roc_auc_score, roc_curve
import matplotlib.pyplot as plt
from sklearn_learning.model_load_store.Util_model import *
"""
Author: Siliang Liu
15/08/2020
Reference itheima.com
"""


def load_data():
    """
    先获取数据
    处理数据
        有缺失值
    数据集划分 测试 训练
    特征工程
        无量纲化-标准化(不要用归一化 之前有笔记)
    逻辑回归预估器
    模型评估
    :return x_train, x_test, y_train, y_test:
    """
    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']
    # # 网上直接下载
    # path = "http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data"
    # original_data = pd.read_csv(path, names=column_name)

    # 文件读取
    original_data = pd.read_csv("../../resources/cancer/breast-cancer-wisconsin.data", names=column_name)

    # 缺失值处理
    # 第一步先替换 ? 为 nan
    data = original_data.replace(to_replace="?", value=np.nan)
    # 第二步可以选择前面笔记里面自己写的的过滤nan也可以用简单的方法如下:
    data.dropna(inplace=True)
    print("检测是否还有缺失值(全为false表示没有缺失值)\n", data.isnull().any())  # 检测是否还有缺失值

    # 第三步 筛选特征值和目标值
    x = data.iloc[:, 1:-1]  # 表示每一行数据都要, 从第一列到倒数第二列的column字段也要
    y = data["Class"]
    x_train, x_test, y_train, y_test = train_test_split(x, y)
    return x_train, x_test, y_train, y_test


def logic_Regression():
    """
    逻辑回归的真实值是分类, 也就是是否属于某一个类别,和线性回归不一样
    线性回归损失函数: (y_predict-y_true)平方和/总数
    逻辑回归损失函数: 对数似然损失(https://blog.csdn.net/u014182497/article/details/82252456)
    逻辑回归用sigmoid函数为例子: 需要把结果映射到sigmoid函数上
    分两种情况:(见截图) y轴表示损失值, 横轴x表示映射结果.(分段函数)
    当真实值为1 见 对数似然损失-1.png
    当真实值为0 见 对数似然损失-2.png
    不难理解,需要对着图看
    逻辑回归损失值得到后需要用梯度下降来优化
    后续就差不多
    :return:
    """

    x_train, x_test, y_train, y_test = load_data()
    # 第四步: 开始特征工程
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 第五步, 预估器流程
    estimator = LogisticRegression()  # 默认参数
    estimator.fit(x_train, y_train)
    print("逻辑回归_权重系数为: ", estimator.coef_)
    print("逻辑回归_偏置为:", estimator.intercept_)

    # store_model(estimator, "logic_regression_model01.pkl")  # 保存模型
    # estimator = load_model("logic_regression_model01.pkl")  # 加载模型

    # 第六步, 模型评估
    y_predict = estimator.predict(x_test)
    print("逻辑回归_预测结果", y_predict)
    print("逻辑回归_预测结果对比:", y_test == y_predict)
    score = estimator.score(x_test, y_test)
    print("准确率为:", score)
    # 2是良性的 4是恶性的
    """
    但是实际上这个预测结果不是我们想要的, 以上只能说明预测的正确与否,
    而事实上, 我们需要一种评估方式来显示我们对恶性breast的预测成功率, 也就是召回率
    同时可以查看F1-score的稳健性
    (召回率和精确率看笔记和截图)
    所以下面换一种评估方法
    """

    Score = classification_report(y_test, y_predict, labels=[2, 4],
                                  target_names=["良性", "恶性"])
    print("查看精确率,召回率,F1-score\n", Score)
    # support表示样本量

    """
    ROC曲线和AUC指标(样本分类不均衡的情况下,可以使用这种方法)
    AUC = 0.5 是瞎猜模型
    AUC = 1 是最好的模型
    AUC < 0.5 属于反向毒奶
    更多的看截图
    """
    # 需要转换为0,1表示
    y_true = np.where(y_test > 3, 1, 0)  # 表示大于3为1,反之为0(class值为2和4)
    return_value = roc_auc_score(y_true, y_predict)
    print("ROC曲线和AUC返回值为(三角形面积)", return_value)

    fpr, tpr, thresholds = roc_curve(y_true, y_predict)
    plt.plot(fpr, tpr)
    plt.show()
    return None


if __name__ == '__main__':
    logic_Regression()

希望对大家都有帮助!!!

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: python机器学习sklearn是一个功能强大的机器学习工具包,提供了许多机器学习算法和工具,包括分类、回归、聚类、降维、模型选择、预处理等等。它的目的是使机器学习更加简单和可重复,以便更多的人可以轻松地使用它。 sklearn代码风格简洁明了,易于理解和使用。它也提供了许多评估指标和工具,帮助用户评估模型的性能。此外,它还支持许多常见的数据集,方便用户进行试验和研究。 总的来说,sklearn是一个非常实用的机器学习工具包,适用于各种机器学习任务。如果你是一个初学者,或者是一个经验丰富的机器学习工程师,都可以从sklearn中受益。 ### 回答2: Python机器学习sklearn是一个功能强大的开源工具,可实现各种常见和先进的机器学习任务。它通过提供简洁易用的API,使得机器学习的各个方面更加容易上手。 sklearn包含了众多的工具,包括预处理、特征提取、监督和无监督学习算法等等。其中,监督学习算法包括分类、回归和聚类。预处理工具包括缺失数据处理、数据标准化等等。而特征提取方面,sklearn支持所有流行的提取技术,如HOG、LBP和Sift等。无论从哪个角度看,sklearn都是一款强大的工具。 sklearn的优点在于它广泛的支持性。它提供了许多内置的数据集,使得机器学习工作更加容易上手。此外,sklearn还提供了许多功能强大的可视化工具,辅助开发者理解机器学习结果。 sklearn做得不足之处在于其内置算法并没有涵盖所有机器学习任务。例如,它并未支持深度学习,限制了其使用范围。另外,由于sklearn提供的是封装的算法,一定程度上降低了自定义的空间。 总而言之,sklearn是一款非常实用的机器学习工具,它在广泛的支持性、API易用性、可视化工具和算法效果上均有表现。但是,虽然它不是完美的,但它仍然是大多数机器学习项目的首选库之一。 ### 回答3: Python机器学习sklearn是一个强大的工具,它提供了多种机器学习算法和工具,包括分类、回归、聚类、降维、模型选择和预处理等功能。sklearn是对其他Python数据处理库,如NumPy和Pandas的补充,使得用户可以快速轻松地对数据进行一些复杂的操作。在许多数据科学和机器学习项目中,sklearn成为了一个不可或缺的工具。 sklearn主要被开发用于数据挖掘和数据分析,并被广泛应用于分类、聚类、回归和推荐系统等领域。该库提供了许多流行的机器学习算法实现,如支持向量机(SVM)、K近邻(KNN)、决策树、随机森林、朴素贝叶斯等。这些算法可以应用于不同类型的数据,如数值、分类、文本、图像和语音等数据。 sklearn的另一个重要特点是它提供了许多有用的数据预处理和数据转换方法,如标准化、归一化、降维、数据合并等方法,这些方法可以使数据更适合于机器学习算法的应用。sklearn还提供了模型选择和评估的工具,如交叉验证、网格搜索和性能度量等方法,这些方法可以帮助用户有效地选择合适的算法和调整其参数。 sklearn的优点不仅在于它的功能和性能,而且在于它在Python社区的支持和贡献。由于python机器学习的社区非常活跃,因此sklearn能够获得广泛的应用和支持。此外,sklearn详细的文档和示例使得学习和使用该库变得更加轻松和容易。 总之,Python机器学习sklearn是一个功能强大、易于使用和广泛应用于数据科学和机器学习项目的工具,它的优点在于其提供了众多有用的机器学习算法和工具,清晰的文档和示例以及强大的Python社区的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值