人工智能实验二报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)]

相关文档
最新文档