人工智能实验二报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
黑龙江大学
实验报告
黑龙江大学教务处
实验名称
K-means算法和GMM算法
实验目的
1.模拟K-means算法
2.模拟GMM算法
实验类型
设计型
实验环境
编程环境:P ython、Spyder
运行环境:Windows XP等
实验步骤
第一步概括实验任务
了解并使用编程环境P ython、Spyder和运行环境Windows XP,通过运用Python语句来实现K-means算法和GMM算法,加深对人工智能理论课的理解和实践能力。
第二步代码实现
实验1:
#聚类的k-means方法
#每次plt.show()都会暂停关闭图片继续执行
import matplotlib.pyplot as plt
from random import *
num = 100
train_steps = 100
mu = 0.2
random_x = []
random_y = []
y = []
rand = Random()
rand.seed(1) #seed() 方法改变随机数生成器的种子
#用正态分布作为随机参数
random_x.extend([rand.normalvariate(1, mu) for _ in range(num)])
random_x.extend([rand.normalvariate(1, mu) for _ in range(num)])
random_x.extend([rand.normalvariate(2, mu) for _ in range(num)])
random_y.extend([rand.normalvariate(1, mu) for _ in range(num)])
random_y.extend([rand.normalvariate(2, mu) for _ in range(num)])
random_y.extend([rand.normalvariate(2, mu) for _ in range(num)])
y.extend([0 for _ in range(num)])
y.extend([1 for _ in range(num)])
y.extend([2 for _ in range(num)])
#显示随机的300个点
# plt.scatter(random_x, random_y, color='black')
# plt.show()
#设置初始化的n个点这个是分成n类的意思这里是分成三类
pred_x = [0.2, 0.3, 0.4]
pred_y = [0.2, 0.3, 0.4]
#设置颜色
color_set = ['red','green','yellow']
plt.scatter(random_x, random_y, color='black')
plt.scatter(pred_x, pred_y, color=color_set, s=250, alpha=0.7) #s半径大小
plt.show()
label = []
#开始循环更新
for step in range(train_steps):
print("Step=",step)
for i in range(len(random_x)):
min_j, min_dist = -1, -1
for j in range(len(pred_x)):#在三个点中选择距离点
dist = pow(random_x[i]-pred_x[j], 2) + pow(random_y[i]-pred_y[j], 2) if min_j == -1 or dist < min_dist:
min_j, min_dist = j, dist
if step == 0:
label.append(min_j)
else:
label[i] = min_j
for i in range(len(pred_x)):
count, x_sum, y_sum = 1, pred_x[i], pred_y[i]
for j in range(len(random_x)):
if label[j] == i:
count += 1
x_sum += random_x[j]
y_sum += random_y[j]
pred_x[i], pred_y[i] = x_sum/count, y_sum/count
#show更新的图
pred_colors = [color_set[k] for k in label] #给点分类的颜色
plt.scatter(random_x, random_y, color=pred_colors)
plt.scatter(pred_x, pred_y, color=color_set, s=250, alpha=0.7) plt.show()
实验2:
# -*- coding: utf-8 -*-
"""
Created on Thu Mar 16 10:04:58 2017
@author: lenovo
"""
from random import *
from matplotlib import pyplot
from numpy import *;
import math
import numpy as np
from math import isnan
rand = Random()
rand.seed(0)
vari = 0.2
x1num = 100
x1 = [rand.normalvariate(2, vari) for i in range(0,x1num)] y1 = [rand.normalvariate(2, vari) for i in range(0,x1num)] l1 = [0 for i in range(0,x1num)]
x2num = 100
x2 = [rand.normalvariate(1, vari) for i in range(0,x2num)]