Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
19 views
Kernel: Python 3 (Anaconda)
import numpy as np import pandas as pd from sklearn import neighbors, metrics, decomposition import matplotlib.pyplot as plt
attr_names="""class Alcohol Malic acid Ash Alcalinity of ash Magnesium Total phenols Flavanoids Nonflavanoid phenols Proanthocyanins Color intensity Hue OD280/OD315 of diluted wines """ attr_names = attr_names.split("\n") print(attr_names)
['class', 'Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols', 'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD280/OD315 of diluted wines', '']
df = pd.read_csv('data/wine.data',sep =',',names=attr_names )
df
X1=df[attr_names[1]].values X2=df[attr_names[2]].values X3=df[attr_names[3]].values X4=df[attr_names[4]].values X5=df[attr_names[5]].values X6=df[attr_names[6]].values X7=df[attr_names[7]].values X8=df[attr_names[8]].values X9=df[attr_names[9]].values X10=df[attr_names[10]].values X11=df[attr_names[11]].values X12=df[attr_names[12]].values
Y= df[attr_names[0]].values
X=np.c_[X1,X2,X3,X4,X5,X6, X7, X8,X9,X10,X11,X12] print(X)
[[ 14.23 1.71 2.43 ..., 5.64 1.04 3.92] [ 13.2 1.78 2.14 ..., 4.38 1.05 3.4 ] [ 13.16 2.36 2.67 ..., 5.68 1.03 3.17] ..., [ 13.27 4.28 2.26 ..., 10.2 0.59 1.56] [ 13.17 2.59 2.37 ..., 9.3 0.6 1.62] [ 14.13 4.1 2.74 ..., 9.2 0.61 1.6 ]]
def plot_map2d(clf,XX): x_min, x_max=XX[:,0].min(), XX[:,0].max()# вычисляем мин и макс знач признака в столбце 0 y_min, y_max=XX[:,1].min(), XX[:,1].max()#вычисляем мин и макс знач признака в столбце 1 x_range=np.linspace(x_min,x_max,200)# создаем одномерную сетку по оси Х y_range=np.linspace(y_min,y_max,200)#создаем одномерную сетку по оси У xx, yy=np.meshgrid(x_range, y_range)#создаем двумерную сетку по двум одномерным # #np.c_[C1,C2]- создает двумерный массив который получается в результате объединения двух столбцов С1 и С2 #xx.ravel(), yy.ravel() - создаем одномерное представление двухмерных сеток как конкатенацию строк сетки Z=clf.predict(np.c_[xx.ravel(), yy.ravel()])# подсказываем с помощью обученного классификатора Z= Z.reshape(xx.shape)# одномерный массив значений превращаем в двумерный с формой как у ХХ #plt.winter() plt.imshow(Z, extent=(x_min, x_max, y_min, y_max), aspect="auto", interpolation="bilinear", origin="lower")# выводим цветовую карту
pca= decomposition.PCA() pca.fit(X)
PCA(copy=True, iterated_power='auto', n_components=None, random_state=None, svd_solver='auto', tol=0.0, whiten=False)
#plt.figure(figsize = (5,4)) #plt.bar(range(178),pca.explained_variance_ratio_) #plt.show()
pca.n_components = 2 U = pca.fit_transform(X) print(U.shape)
(178, 2)
clf2=neighbors.KNeighborsClassifier(n_neighbors= 5, weights = 'distance') clf2.fit(U,Y)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=1, n_neighbors=5, p=2, weights='distance')
Y_p=clf2.predict(U) print(metrics.accuracy_score(Y, Y_p))
1.0
plt.figure(figsize=(6.0,5.0)) plot_map2d(clf2,U) plt.scatter(U[:,0],U[:,1], c=Y,edgecolors='k') plt.title('distance') plt.xlabel('1я компонента') plt.ylabel('2я компонента') plt.show()
Image in a Jupyter notebook
clf2=neighbors.KNeighborsClassifier(n_neighbors= 3, weights = 'distance') clf2.fit(U,Y)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=1, n_neighbors=3, p=2, weights='distance')
Y_p=clf2.predict(U) print(metrics.accuracy_score(Y, Y_p))
1.0
plt.figure(figsize=(6.0,5.0)) plot_map2d(clf2,U) plt.scatter(U[:,0],U[:,1], c=Y,edgecolors='k') plt.title('distance') plt.xlabel('1я компонента') plt.ylabel('2я компонента') plt.show()
Image in a Jupyter notebook
clf2=neighbors.KNeighborsClassifier(n_neighbors= 7, weights = 'distance') clf2.fit(U,Y)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=1, n_neighbors=7, p=2, weights='distance')
Y_p=clf2.predict(U) print(metrics.accuracy_score(Y, Y_p))
1.0
plt.figure(figsize=(6.0,5.0)) plot_map2d(clf2,U) plt.scatter(U[:,0],U[:,1], c=Y,edgecolors='k') plt.title('distance') plt.xlabel('1я компонента') plt.ylabel('2я компонента') plt.show()
Image in a Jupyter notebook