Professional Documents
Culture Documents
DSM 1
DSM 1
def read_dataset(filename):
df = pd.read_csv(filename)
matrix = df.to_numpy()
return matrix
csv_file = "iris.csv"
dataset = read_dataset(csv_file)
1
[6.3 3.3 6.0 2.5 'Virginica']
[5.8 2.7 5.1 1.9 'Virginica']
[7.1 3.0 5.9 2.1 'Virginica']
[6.3 2.9 5.6 1.8 'Virginica']
[6.5 3.0 5.8 2.2 'Virginica']
[7.6 3.0 6.6 2.1 'Virginica']
[4.9 2.5 4.5 1.7 'Virginica']
[7.3 2.9 6.3 1.8 'Virginica']
[6.7 2.5 5.8 1.8 'Virginica']
[7.2 3.6 6.1 2.5 'Virginica']]
0.2 2.a Calculate Data mean for each attribute and represent it as a vector
[ ]: def calculate_data_mean(filename):
# Read the CSV file using pandas
df = pd.read_csv(filename)
return mean_vector
2
0.5 2.d Calculate Chebyshev distance between two data objects
[124]: def Chebychev(vec1,vec2):
dist= np.max(np.absolute(np.array(vec1) - np.array(vec2)))
return dist
mahalanobis_distance = np.sqrt(mahalanobis_sq)
return mahalanobis_distance
iris_data = pd.read_csv('iris.csv')
# ref https://www.machinelearningplus.com/statistics/mahalanobis-distance/
3
raise ValueError("Invalid distance metric. Supported options are␣
↪ 'manhattan', 'chebyshev', 'euclidean', and 'mahalanobis'.")
distances.append((dist, labels[i]))
distances.sort()
k_nearest = distances[:k]
k_nearest_labels = [label for (_, label) in k_nearest]
most_common = Counter(k_nearest_labels).most_common(1)
predicted_label = most_common[0][0]
return predicted_label
# Example usage: classify a random point using KNN with different distance␣
↪metrics
4
return centroids
if distance_metric == 'mahalanobis':
distances = pairwise_distances(data, metric=distance_metric)
else:
distances = pairwise_distances(data, centroids, metric=distance_metric)
cluster_labels = np.argmin(distances, axis=1)
return cluster_labels
centroids = initialize_centroids(data, k)
for _ in range(max_iterations):
cluster_labels = assign_clusters(data, centroids, distance_metric)
new_centroids = update_centroids(data, cluster_labels, k)
if np.array_equal(centroids, new_centroids):
break
centroids = new_centroids
return cluster_labels, centroids
5
print(cluster_labels)
print("Centroids:")
print(centroids)
print("-------------")