机器学习中的聚类(Clustering)是一种无监督学习方法,它通过分析数据集中的特征和规律,将数据自动划分为若干个具有相似特征的簇(cluster)。聚类的目的是找出数据之间的内在联系,为数据挖掘和分析提供有用的信息。
聚类算法的主要步骤如下:
- 选择合适的聚类算法:聚类算法有很多种,如 K-means、DBSCAN、Hierarchical Clustering 等。根据实际问题和数据特点,选择合适的聚类算法。
- 数据预处理:对原始数据进行预处理,如去除异常值、填补缺失值、归一化等,以提高聚类效果。
- 初始化聚类中心:根据选定的聚类算法,初始化聚类中心。对于 K-means 算法,可以随机选择 k 个初始中心;对于 DBSCAN 算法,需要指定核心点数和邻域大小。
- 分配数据点到聚类中心:计算每个数据点到各个聚类中心的距离,将数据点分配到距离最近的聚类中心所在的簇。
- 重新计算聚类中心:根据新生成的簇,重新计算每个簇的聚类中心。这可以通过簇内平均值、中心点等方法实现。
- 重复步骤 4 和 5,直到聚类结果稳定:聚类中心不断更新,数据点不断分配到新的簇,直至聚类结果不再发生变化或达到预设的最大迭代次数。
- 评估聚类效果:使用一些评估指标(如轮廓系数、误差平方和等)来评估聚类的效果,以便选择最佳聚类算法和参数。
聚类算法在许多领域都有广泛应用,例如数据挖掘、生物信息学、社交网络分析等。在使用聚类算法时,需要注意选择合适的算法、参数和评估指标,以获得较好的聚类效果。
Ch 04: Concept 02
Logistic regression
Import the usual libraries, and set up the usual hyper-parameters:
%matplotlib inline
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
learning_rate = 0.01
training_epochs = 1000
Set up some data to work with:
x1 = np.random.normal(-4, 2, 1000)
x2 = np.random.normal(4, 2, 1000)
xs = np.append(x1, x2)
ys = np.asarray([0.] * len(x1) + [1.] * len(x2))
plt.scatter(xs, ys)
<matplotlib.collections.PathCollection at 0x7f7ccfcfa2e8>
Define the placeholders, variables, model, cost function, and training op:
X = tf.placeholder(tf.float32, shape=(None,), name="x")
Y = tf.placeholder(tf.float32, shape=(None,), name="y")
w = tf.Variable([0., 0.], name="parameter", trainable=True)
y_model = tf.sigmoid(w[1] * X + w[0])
cost = tf.reduce_mean(-Y * tf.log(y_model) - (1 - Y) * tf.log(1 - y_model))
train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
Train the logistic model on the data:
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
prev_err = 0
for epoch in range(training_epochs):
err, _ = sess.run([cost, train_op], {X: xs, Y: ys})
if epoch % 100 == 0:
print(epoch, err)
if abs(prev_err - err) < 0.0001:
break
prev_err = err
w_val = sess.run(w, {X: xs, Y: ys})
0 0.693147
100 0.143233
200 0.105674
300 0.0909075
Now let's see how well our logistic function matched the training data points:
all_xs = np.linspace(-10, 10, 100)
with tf.Session() as sess:
predicted_vals = sess.run(tf.sigmoid(all_xs * w_val[1] + w_val[0]))
plt.plot(all_xs, predicted_vals)
plt.scatter(xs, ys)
plt.show()
```