机器学习实验3:神经网络模型实现 基于sklearn

实验目的

  1. 理解神经网络相关原理和概念;
  2. 能够使用神经网络解决相关问题;
  3. 熟练使用 Scikit-learn 中神经网络相关模块。

实验内容

使用神经网络解决糖尿病病情预测问题。

数据集介绍

样本数据个数: 442
特征个数(数据维度): 10
各特征含义: 年龄,性别,BMI指数,平均血压,S1,S2,S3,S4,S5,S6
特征取值范围: (-0.2,0.2)
标签含义: 基于病情进展一年后的定量测量
标签取值范围 :[25,346]

实验准备

引入糖尿病数据集

from sklearn.datasets import load_diabetes
diabetes = load_diabetes()
X = diabetes.data  # 特征向量集
y = diabetes.target  # 标记集

数据标准化

from sklearn.preprocessing import StandardScaler

ss = StandardScaler()
# 将先数据再拟合标准化
Xs1 = ss.fit_transform(X)
# 将数据标准化
ss.fit(X)
Xs2 = ss.transform(X)


X
Out[4]: 
array([[ 0.03807591,  0.05068012,  0.06169621, ..., -0.00259226,
         0.01990842, -0.01764613],
       [-0.00188202, -0.04464164, -0.05147406, ..., -0.03949338,
        -0.06832974, -0.09220405],
       [ 0.08529891,  0.05068012,  0.04445121, ..., -0.00259226,
         0.00286377, -0.02593034],
       ...,
       [ 0.04170844,  0.05068012, -0.01590626, ..., -0.01107952,
        -0.04687948,  0.01549073],
       [-0.04547248, -0.04464164,  0.03906215, ...,  0.02655962,
         0.04452837, -0.02593034],
       [-0.04547248, -0.04464164, -0.0730303 , ..., -0.03949338,
        -0.00421986,  0.00306441]])

Xs1
Out[5]: 
array([[ 0.80050009,  1.06548848,  1.29708846, ..., -0.05449919,
         0.41855058, -0.37098854],
       [-0.03956713, -0.93853666, -1.08218016, ..., -0.83030083,
        -1.43655059, -1.93847913],
       [ 1.79330681,  1.06548848,  0.93453324, ..., -0.05449919,
         0.06020733, -0.54515416],
       ...,
       [ 0.87686984,  1.06548848, -0.33441002, ..., -0.23293356,
        -0.98558469,  0.32567395],
       [-0.9560041 , -0.93853666,  0.82123474, ...,  0.55838411,
         0.93615545, -0.54515416],
       [-0.9560041 , -0.93853666, -1.53537419, ..., -0.83030083,
        -0.08871747,  0.06442552]])

Xs2
Out[6]: 
array([[ 0.80050009,  1.06548848,  1.29708846, ..., -0.05449919,
         0.41855058, -0.37098854],
       [-0.03956713, -0.93853666, -1.08218016, ..., -0.83030083,
        -1.43655059, -1.93847913],
       [ 1.79330681,  1.06548848,  0.93453324, ..., -0.05449919,
         0.06020733, -0.54515416],
       ...,
       [ 0.87686984,  1.06548848, -0.33441002, ..., -0.23293356,
        -0.98558469,  0.32567395],
       [-0.9560041 , -0.93853666,  0.82123474, ...,  0.55838411,
         0.93615545, -0.54515416],
       [-0.9560041 , -0.93853666, -1.53537419, ..., -0.83030083,
        -0.08871747,  0.06442552]])

模块划分

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)

神经网络分类模块

from sklearn.neural_network import MLPClassifier

神经网络回归模块

from sklearn.neural_network import MLPRegressor

神经网络模块属性

- hidden_layer_sizes:

  hidden_layer_sizes=(50, 50) # 表示有两层隐藏层,第一层隐藏层有50个神经元,第二层也有50个神经元。

- activation: 激活函数 ,默认relu

  identity:f(x) = x
  logistic:f(x) = 1 / (1 + exp(-x)).
  tanh:f(x) = tanh(x).
  relu:f(x) = max(0, x)

- solver: 权重优化器,默认adam
  lbfgs: quasi-Newton方法的优化器
  sgd:随机梯度下降
  adam: Kingma, Diederik, and Jimmy Ba 提出的机遇随机梯度的优化器
  注意:默认solver ‘adam’在相对较大的数据集上效果比较好(几千个样本或者更多),对小数据集来说,lbfgs收敛更快效果也更好。

- alpha: float,可选的,默认0.0001,正则化项参数

- batch_size: int , 可选的,默认’auto’,随机优化的minibatches的大小batch_size=min(200,n_samples),如果solver是’lbfgs’,分类器将不使用minibatch

- learning_rate :学习率,用于权重更新,只有当solver为’sgd’时使用,默认constant
  ‘constant’: 有’learning_rate_init’给定的恒定学习率
  ‘incscaling’:随着时间t使用’power_t’的逆标度指数不断降低学习率learning_rate_ ,effective_learning_rate = learning_rate_init / pow(t, power_t)

- ‘adaptive’:只要训练损耗在下降,就保持学习率为’learning_rate_init’不变,当连续两次不能降低训练损耗或验证分数停止升高至少tol时,将当前学习率除以5.

- power_t: double, 可选, default 0.5,只有solver=’sgd’时使用,是逆扩展学习率的指数.

- learning_rate=’invscaling’,用来更新有效学习率。

- max_iter: int,可选,默认200,最大迭代次数。

- random_state:int 或RandomState,可选,默认None,随机数生成器的状态或种子。

- shuffle: bool,可选,默认True,只有当solver=’sgd’或者‘adam’时使用,判断是否在每次迭代时对样本进行清洗。

- tol:float, 可选,默认1e-4,优化的容忍度

- learning_rate_int:double,可选,默认0.001,初始学习率,控制更新权重的补偿,只有当solver=’sgd’ 或’adam’时使用。

实现糖尿病预测

通过分类

from sklearn.datasets import load_diabetes
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

# 保存数据集
diabetes = load_diabetes()
X = diabetes.data  # 特征向量集
y = diabetes.target  # 标记集

# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=26)

# 数据标准化
ss = StandardScaler()
ss.fit(X_train)
X_train = ss.transform(X_train)
X_test = ss.transform(X_test)

# 建立模型1
mlpmodel = MLPClassifier(solver='lbfgs',hidden_layer_sizes=(100))
mlpmodel.fit(X_train,y_train)
mlpmodel.score(X_test,y_test,sample_weight=None)

Out[11]: 0.011235955056179775

# 建立模型2
mlpmodel1 = MLPClassifier(hidden_layer_sizes=(1000))
mlpmodel1.fit(X_train,y_train)
mlpmodel1.score(X_test,y_test,sample_weight=None)

Out[11]: 0.02247191011235955
    
# 建立模型3
mlpmodel2 = MLPClassifier(hidden_layer_sizes=(10000))
mlpmodel2.fit(X_train,y_train)
mlpmodel2.score(X_test,y_test,sample_weight=None)

Out[23]: 0.0224719101123595

# 建立模型4
mlpmodel3 = MLPClassifier(solver='lbfgs',hidden_layer_sizes=(100,100))
mlpmodel3.fit(X_train,y_train)
mlpmodel3.score(X_test,y_test,sample_weight=None)

Out[24]: 0.011235955056179775
    
# 建立模型5
mlpmodel4 = MLPClassifier(solver='lbfgs',hidden_layer_sizes=(100,100,100))
mlpmodel4.fit(X_train,y_train)
mlpmodel4.score(X_test,y_test,sample_weight=None)

Out[25]: 0.011235955056179775

通过回归

from sklearn.datasets import load_diabetes
from sklearn.neural_network import MLPRegressor
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

# 保存数据集
diabetes = load_diabetes()
X = diabetes.data  # 特征向量集
y = diabetes.target  # 标记集

# 划分数据
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=26)

# 数据标准化
ss = StandardScaler()
ss.fit(X_train)
X_train = ss.transform(X_train)
X_test = ss.transform(X_test)


# 建立模型1
mlpmodel = MLPRegressor(hidden_layer_sizes=(100))
mlpmodel.fit(X_train,y_train)
mlpmodel.score(X_test,y_test,sample_weight=None)

Out[11]: -1.4322417210808136

# 建立模型2
mlpmodel1 = MLPRegressor(hidden_layer_sizes=(1000))
mlpmodel1.fit(X_train,y_train)
mlpmodel1.score(X_test,y_test,sample_weight=None)

Out[11]: 0.21921630994511387
    
# 建立模型3
mlpmodel2 = MLPRegressor(hidden_layer_sizes=(10000))
mlpmodel2.fit(X_train,y_train)
mlpmodel2.score(X_test,y_test,sample_weight=None)

Out[23]: 0.4405095276511962

# 建立模型4
mlpmodel3 = MLPRegressor(hidden_layer_sizes=(100,100))
mlpmodel3.fit(X_train,y_train)
mlpmodel3.score(X_test,y_test,sample_weight=None)

Out[24]: 0.3716811807893977
    
# 建立模型5
mlpmodel4 = MLPRegressor(hidden_layer_sizes=(100,100,100))
mlpmodel4.fit(X_train,y_train)
mlpmodel4.score(X_test,y_test,sample_weight=None)

Out[25]:  0.40633014171562987
  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: scikit-learn(简称sklearn)是一个用于机器学习Python库,它包含了所有常用的机器学习算法,如决策树、支持向量机、随机森林、神经网络等。以下是sklearn的基本用法: 1. 导入模块 首先需要导入需要的模块,如下所示: ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score ``` 2. 加载数据集 使用sklearn自带的数据集,如iris数据集,可以直接使用load_iris()函数加载。 ```python iris = datasets.load_iris() X = iris.data y = iris.target ``` 3. 数据预处理 将数据集划分为训练集和测试集,可以使用train_test_split()函数。 ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` 4. 模型训练 选择合适的机器学习模型,如决策树,训练模型并预测结果。 ```python clf = DecisionTreeClassifier() clf.fit(X_train, y_train) y_pred = clf.predict(X_test) ``` 5. 模型评估 使用accuracy_score()函数计算模型的准确率。 ```python accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ``` 以上就是sklearn的基本用法,更多内容可以参考sklearn官方文档。 ### 回答2: scikit-learn(简称sklearn)是一个被广泛使用的Python机器学习库。它提供了许多用于数据处理、特征工程、监督和无监督学习等功能。sklearn具有简洁的API和丰富的功能,使得使用它变得相对容易。 使用sklearn,我们可以很方便地完成各种机器学习任务。首先,我们需要导入所需的模块和函数。常见的导入包括导入数据集、模型、评估指标和一些预处理函数。 接下来,我们可以使用sklearn提供的数据集进行实验sklearn内置了一些常见的数据集,如鸢尾花数据集、波士顿房价数据集等。我们可以直接通过调用相应的函数获取这些数据集并进行预处理。 在数据集准备好后,我们可以选择适当的模型来训练和预测。sklearn提供了许多经典的机器学习模型,如线性回归、逻辑回归、决策树、随机森林等。我们只需实例化模型对象,然后使用fit()函数对模型进行训练,并用predict()函数进行预测。 在训练和预测之后,我们可以使用sklearn提供的评估指标来评估模型的性能。对于不同类型的任务,如分类、回归、聚类等,sklearn都提供了相应的评估指标,如准确率、均方误差、R方等。我们可以利用这些指标来评估模型的拟合能力和泛化能力。 此外,sklearn还提供了许多功能强大的特征工程函数,如特征选择、特征提取和特征变换等。这些函数可以帮助我们提取有用的特征、减少维度以及处理缺失值和异常值等。 总之,sklearn是一个功能丰富且易于使用的机器学习库。它提供了许多机器学习模型、数据处理函数和评估指标,能够帮助我们完成从数据准备到模型训练和评估等一系列机器学习任务。通过灵活地调用这些函数和模块,我们可以根据具体需求快速、高效地构建机器学习模型。 ### 回答3: sklearn是一个机器学习库,它基于Python语言开发,提供了多种常用的机器学习算法和工具函数,使得机器学习实现变得更加简单和高效。 使用sklearn,我们需要先导入相应的模块,比如导入`from sklearn.model_selection import train_test_split`用于数据集的划分,`from sklearn.preprocessing import StandardScaler`进行数据的标准化,以及导入具体的机器学习算法模型,比如`from sklearn.linear_model import LogisticRegression`用于逻辑回归模型。 在使用sklearn进行机器学习任务时,一般需要按照以下步骤进行: 1. 准备训练数据集:首先要准备带有标签的训练数据集,数据集的特征和标签应该分别存储在不同的numpy数组中。 2. 数据预处理:对数据进行预处理,比如特征选择、数据标准化、缺失值处理等。sklearn提供了丰富的工具函数供我们使用。 3. 划分数据集:将数据集划分为训练集和测试集,可以使用`train_test_split`方法来完成。 4. 构建模型:选择合适的机器学习模型,比如线性回归、决策树、随机森林等,并根据需求设置模型参数。 5. 模型训练:使用训练数据集对模型进行训练,可以使用模型的`fit()`方法。 6. 模型预测:使用训练好的模型对测试数据集进行预测,可以使用模型的`predict()`方法。 7. 模型评估:评估模型在测试数据集上的性能,常用的评估指标有准确率、精确率、召回率、F1值等。可以使用`metrics`模块提供的函数进行评估。 总的来说,sklearn提供了简洁、高效和易用的机器学习工具,使用它可以更轻松地完成机器学习任务。但是在具体应用中,需要根据实际情况选择合适的模型和调整参数,以达到更好的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值