用深度神经网络对boston housing data进行回归预测的程序--tensorflow

"""DNNRegressor with custom input_fn for Housing dataset."""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import itertools

import pandas as pd
import tensorflow as tf

tf.logging.set_verbosity(tf.logging.INFO)

COLUMNS = ["crim", "zn", "indus", "nox", "
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来回答您的问题。 首先,您需要安装模糊控制库 `scikit-fuzzy`,可以使用以下命令进行安装: ``` pip install -U scikit-fuzzy ``` 接下来,您需要准备Boston Housing数据集。可以使用以下代码进行下载和加载: ```python from sklearn.datasets import load_boston boston = load_boston() X = boston.data y = boston.target ``` 接着,您需要对数据进行归一化处理,可以使用 `MinMaxScaler` 进行处理: ```python from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() X = scaler.fit_transform(X) ``` 然后,您需要定义模糊控制系统的输入和输出变量。我们假设有三个输入变量:房间数、税收和犯罪率,一个输出变量:房价。可以使用以下代码进行定义: ```python import numpy as np import skfuzzy as fuzz # Define input variables rooms = np.arange(1, 11, 1) tax = np.arange(0, 1.1, 0.1) crime = np.arange(0, 1.1, 0.1) # Define output variable price = np.arange(0, 51, 1) ``` 接着,您需要定义每个变量的隶属度函数。可以使用以下代码进行定义: ```python # Define membership functions for each variable rooms_low = fuzz.trimf(rooms, [1, 1, 5]) rooms_med = fuzz.trimf(rooms, [1, 5, 10]) rooms_high = fuzz.trimf(rooms, [5, 10, 10]) tax_low = fuzz.trimf(tax, [0, 0, 0.5]) tax_med = fuzz.trimf(tax, [0, 0.5, 1]) tax_high = fuzz.trimf(tax, [0.5, 1, 1]) crime_low = fuzz.trimf(crime, [0, 0, 0.5]) crime_med = fuzz.trimf(crime, [0, 0.5, 1]) crime_high = fuzz.trimf(crime, [0.5, 1, 1]) price_low = fuzz.trimf(price, [0, 0, 25]) price_med = fuzz.trimf(price, [0, 25, 50]) price_high = fuzz.trimf(price, [25, 50, 50]) ``` 然后,您需要定义规则库,将输入变量映射到输出变量。可以使用以下代码进行定义: ```python # Define rules rule1 = np.fmax(rooms_low, np.fmax(tax_low, crime_low)) rule2 = np.fmax(rooms_med, np.fmax(tax_med, crime_med)) rule3 = np.fmax(rooms_high, np.fmax(tax_high, crime_high)) # Define output membership functions for each rule out_low = np.fmin(rule1, price_low) out_med = np.fmin(rule2, price_med) out_high = np.fmin(rule3, price_high) # Aggregate all output membership functions aggregated = np.fmax(out_low, np.fmax(out_med, out_high)) # Calculate defuzzified output value result = fuzz.defuzz(price, aggregated, 'centroid') ``` 最后,您可以将以上代码整合为一个函数,并使用交叉验证等技术对模型进行评估。完整代码如下: ```python import numpy as np import skfuzzy as fuzz from sklearn.datasets import load_boston from sklearn.preprocessing import MinMaxScaler from sklearn.model_selection import cross_val_score def fuzzy_regression(X, y): # Define input variables rooms = np.arange(1, 11, 1) tax = np.arange(0, 1.1, 0.1) crime = np.arange(0, 1.1, 0.1) # Define output variable price = np.arange(0, 51, 1) # Define membership functions for each variable rooms_low = fuzz.trimf(rooms, [1, 1, 5]) rooms_med = fuzz.trimf(rooms, [1, 5, 10]) rooms_high = fuzz.trimf(rooms, [5, 10, 10]) tax_low = fuzz.trimf(tax, [0, 0, 0.5]) tax_med = fuzz.trimf(tax, [0, 0.5, 1]) tax_high = fuzz.trimf(tax, [0.5, 1, 1]) crime_low = fuzz.trimf(crime, [0, 0, 0.5]) crime_med = fuzz.trimf(crime, [0, 0.5, 1]) crime_high = fuzz.trimf(crime, [0.5, 1, 1]) price_low = fuzz.trimf(price, [0, 0, 25]) price_med = fuzz.trimf(price, [0, 25, 50]) price_high = fuzz.trimf(price, [25, 50, 50]) # Define rules rule1 = np.fmax(rooms_low, np.fmax(tax_low, crime_low)) rule2 = np.fmax(rooms_med, np.fmax(tax_med, crime_med)) rule3 = np.fmax(rooms_high, np.fmax(tax_high, crime_high)) # Define output membership functions for each rule out_low = np.fmin(rule1, price_low) out_med = np.fmin(rule2, price_med) out_high = np.fmin(rule3, price_high) # Aggregate all output membership functions aggregated = np.fmax(out_low, np.fmax(out_med, out_high)) # Calculate defuzzified output value result = fuzz.defuzz(price, aggregated, 'centroid') return result # Load Boston Housing dataset boston = load_boston() X = boston.data y = boston.target # Normalize input data scaler = MinMaxScaler() X = scaler.fit_transform(X) # Evaluate model using cross-validation scores = cross_val_score(fuzzy_regression, X, y, cv=10) print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2)) ``` 希望这个回答对您有帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值