需要用到的python库有:
sklearn、tensorflow
import pandas as pd
import tensorflow as tf
from sklearn import datasets
# 加载数据集
iris_df = datasets.load_iris()
# 数据集切片
data = iris_df.data
data=pd.DataFrame(data,columns=['seqpallength','sepalwidth','petallength','petalwidth'])
data['species']=iris_df.target
# 打乱数据集的顺序
data = data.sample(frac=1).reset_index(drop=True)
# 把训练集与测试集分开
data_train,data_test = data[:120],data[120:]
train_x, train_y = data_train, data_train.pop('species')
test_x,test_y = data_test,data_test.pop('species')
# 提取特征值
feature_columns = []
for key in train_x.keys():
feature_columns.append(tf.feature_column.numeric_column(key=key))
print(feature_columns)
# 构建训练模型
classifier = tf.estimator.DNNClassifier(
# 这个模型接受哪些输入的特征
feature_columns=feature_columns,
# 包含两个隐藏层,每个隐藏层包含10个神经元.
hidden_units=[10, 10],
# 最终结果要分成几类
n_classes=3)
def train_func(train_x,train_y):
dataset=tf.data.Dataset.from_tensor_slices((dict(train_x), train_y))
dataset = dataset.shuffle(1000).repeat().batch(100)
return dataset
# 进行模型训练,进行2000 个回合的训练,每次100调数据
classifier.train(
input_fn=lambda:train_func(train_x,train_y),
steps=2000)
# 模型预测
def eval_input_fn(features, labels, batch_size):
features=dict(features)
if labels is None:
# No labels, use only features.
inputs = features
else:
inputs = (features, labels)
dataset = tf.data.Dataset.from_tensor_slices(inputs)
assert batch_size is not None, "batch_size must not be None"
dataset = dataset.batch(batch_size)
return dataset
predict_arr = []
predictions = classifier.predict(
input_fn=lambda:eval_input_fn(test_x,labels=test_y,batch_size=100))
for predict in predictions:
predict_arr.append(predict['probabilities'].argmax())
result = predict_arr == test_y
result1 = [w for w in result if w == True]
print("准确率为 %s"%str((len(result1)/len(result))))
注:此代码只是个人根据当时的环境满足了当时的需求,记录下来用做后续参考!如有问题,请检查软硬件环境是否一致,由于时间精力有限,大部分未做详细环境描述。