Advertisement
lancernik

Aisd56

May 14th, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.15 KB | None | 0 0
  1. # ------------------- zadanie 1 -----------------------
  2.  
  3. import numpy as np
  4. import matplotlib # <<<<<<<
  5. matplotlib.use('TkAgg') # <<<<<<< te dwie linijki muszę zrobić na macu, bo sobie źle zainstalowałem rzeczy, Ty ich nie musisz używać
  6. import matplotlib.pyplot as plt
  7.  
  8.  
  9. def sigmoid(x): return 1/(1+np.power(np.e, -x))
  10.  
  11.  
  12. x = np.linspace(start=-10, stop=10, num=20000) # definicja osi X
  13. y = sigmoid(x) # liczenie osi Y
  14.  
  15.  
  16. plt.figure()
  17. plt.plot(x, y)
  18. plt.grid()
  19. plt.show()
  20.  
  21.  
  22. # ------------------- zadanie 2 -----------------------
  23.  
  24. import pandas as pd
  25.  
  26. import numpy as np
  27. import matplotlib # <<<<<<<
  28. matplotlib.use('TkAgg') # <<<<<<< te dwie linijki muszę zrobić na macu, bo sobie źle zainstalowałem rzeczy, Ty ich nie musisz używać
  29. import matplotlib.pyplot as plt
  30.  
  31. from sklearn.model_selection import train_test_split
  32. from sklearn import metrics
  33. from sklearn.linear_model import LogisticRegression
  34.  
  35.  
  36. data = pd.read_csv('./diabetes.csv')
  37.  
  38. features_columns = ['Pregnancies','Glucose','BloodPressure','SkinThickness','Insulin','BMI','DiabetesPedigreeFunction','Age']
  39. labels_column = ['Outcome']
  40.  
  41. features = data[features_columns].to_numpy()
  42. labels = data[labels_column].to_numpy().reshape(-1, )
  43.  
  44. X_train, X_test, y_train, y_test = train_test_split(features, labels, train_size=0.75, random_state=123) # podział zbioru na testowy i testowy w stosunku 75%:25%, ziarno losowości ustawione na 123 (liczba bez znaczenia xD)
  45.  
  46. lr = LogisticRegression(solver='lbfgs') # przygotowanie modelu
  47. lr.fit(X_train, y_train) # trening modelu
  48. y_pred = lr.predict(X_test) # predykcja
  49.  
  50. cm = metrics.confusion_matrix(y_test, y_pred) # liczenie macierzy pomyłek
  51.  
  52. # rysowanko macierzy pomyłek
  53. classes = np.unique(labels)
  54.  
  55. fig, ax = plt.subplots()
  56. im = ax.imshow(cm, interpolation='nearest', cmap=plt.cm.Blues)
  57. ax.figure.colorbar(im, ax=ax)
  58. ax.set(xticks=np.arange(cm.shape[1]),
  59. yticks=np.arange(cm.shape[0]),
  60. xticklabels=classes, yticklabels=classes,
  61. ylabel='True label',
  62. xlabel='Predicted label')
  63.  
  64. # Tutaj tworzymy anotacje w pętli dla każdego kwadracika.
  65. fmt = '.2f' # ilość miejsc po przecinku
  66. thresh = cm.max() / 2. # próg dla koloru tekstu, żeby się nie zlewało
  67. for i in range(cm.shape[0]):
  68. for j in range(cm.shape[1]):
  69. ax.text(j, i, format(cm[i, j], fmt),
  70. ha="center", va="center",
  71. color="white" if cm[i, j] > thresh else "black")
  72. fig.tight_layout()
  73.  
  74.  
  75. # ------------------- zadanie 3 -----------------------
  76. # w tym wypadku będziemy sobie tworzyć wykres kawałek po kawałku
  77.  
  78. import matplotlib # <<<<<<<
  79. matplotlib.use('TkAgg') # <<<<<<< te dwie linijki muszę zrobić na macu, bo sobie źle zainstalowałem rzeczy, Ty ich nie musisz używać
  80. import matplotlib.pyplot as plt
  81.  
  82. from sklearn.datasets.samples_generator import make_blobs
  83. from sklearn.svm import SVC
  84.  
  85.  
  86. # nowa figure
  87. plt.figure()
  88.  
  89.  
  90. # tworzymy punkty
  91. coordinates, classes = make_blobs(n_samples=50, centers=2, random_state=0, cluster_std=0.60)
  92. # dzielimy współrzędne na iksy i igreki
  93. x = coordinates[:, 0] # współrzędne x to wszystkie elementy zerowej kolumny
  94. y = coordinates[:, 1] # współrzędne y to wszystkie elementy pierwszej kolumny
  95.  
  96.  
  97. # do figury dodajemy punkty
  98. plt.scatter(x=x, y=y, c=classes)
  99.  
  100.  
  101. # tworzymy liniowy klasyfikator SVM i go uczymy
  102. clf = SVC(kernel='linear')
  103. clf.fit(coordinates, classes)
  104.  
  105. # klasyfikator SVM w najprostszej postaci to nic innego jak prosta oddzielająca dwa zbiory
  106. w = clf.coef_[0] # współrzędne linii podziału klasyfikatora
  107. a = -w[0] / w[1] # liczenie alfa
  108.  
  109. # liczenie lini podziału
  110. xx = np.linspace(int(min(x)-1), int(max(x)+1)) # oś x do wizualizacji
  111. yy = a * xx - (clf.intercept_[0]) / w[1] # oś y do wizualizacji, intercept_ to stała w równaniu SVMa
  112.  
  113. # rysowanko lini ciągłej (główna oś podziału)
  114. plt.plot(xx, yy, 'k-')
  115.  
  116. # tworzenie marginesów (wektorów nośnych)
  117. margin = 1 / np.sqrt(np.sum(clf.coef_ ** 2))
  118. yy_down = yy - np.sqrt(1 + a ** 2) * margin
  119. yy_up = yy + np.sqrt(1 + a ** 2) * margin
  120.  
  121. # rysowanko wektorów nośnych
  122. plt.plot(xx, yy_down, 'k--')
  123. plt.plot(xx, yy_up, 'k--')
  124.  
  125.  
  126. # ------------------- zadanie 4 -----------------------
  127. import numpy as np
  128. import pandas as pd
  129. from sklearn.model_selection import train_test_split
  130. from sklearn.svm import SVC
  131. from sklearn.metrics import classification_report
  132.  
  133. data = pd.read_csv('./iris.csv')
  134.  
  135. features = data[['sepal.length', 'sepal.width', 'petal.length', 'petal.width']].to_numpy()
  136. labels = data[['variety']].to_numpy().reshape(-1, )
  137. classes = np.unique(labels)
  138.  
  139. X_train, X_test, y_train, y_test = train_test_split(features, labels, train_size=0.75, random_state=123)
  140.  
  141.  
  142. # wilomianowe jądro
  143. clf1 = SVC(kernel='poly')
  144. clf1.fit(X_train, y_train)
  145. y_pred = clf1.predict(X_test)
  146.  
  147. print(classification_report(y_test, y_pred))
  148.  
  149. # gaussowskie jądro
  150. clf2 = SVC(kernel='rbf')
  151. clf2.fit(X_train, y_train)
  152. y_pred = clf2.predict(X_test)
  153.  
  154. print(classification_report(y_test, y_pred))
  155.  
  156. # sigmoid jądro
  157. clf3 = SVC(kernel='sigmoid')
  158. clf3.fit(X_train, y_train)
  159. y_pred = clf3.predict(X_test)
  160.  
  161. print(classification_report(y_test, y_pred))
  162.  
  163. """
  164. różne jądra rysują różna hiperpłaszczyzny rozdielające dane, przenosząc to do 2D, to możemy mieć podział albo linią prostą,
  165. albo funkcją gaussa (wtedy część danych jest nad funkcją a reszta pod) https://scikit-learn.org/stable/auto_examples/svm/plot_svm_kernels.html#sphx-glr-auto-examples-svm-plot-svm-kernels-py
  166.  
  167. parametry w classification report:
  168. Precission - positive predictive values - precyzja, mówi ile procent próbek zaklasyfikowanych jako pozytywne było rzeczywiście pozytywne (TP/(TP + FP))
  169. Recall - sensitivity - true positive rate - czułość - mówi ile procent tych próbek, które miały być zaklasyfikowane jako pozytywne były rzeczywiście pozytywne (TP/(TP + FN))
  170. f1-score - średnia harmoniczna (czyli taka, która bierze pod uwagę liczebność) precyzji i czułości
  171.  
  172. Support to ilość próbek w danym zbiorze xD
  173.  
  174. """
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement