<?xml version="1.0" encoding="utf-8"?>
	<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
		<channel>
			<title>Школа179 - Информатика/Архив/2017/11Б1/matplotlib</title>
			<link>https://ejudge.179.ru/wiki/Информатика/Архив/2017/11Б1/matplotlib</link>
			<description>История изменений  Школа179: Информатика/Архив/2017/11Б1/matplotlib</description>
			<lastBuildDate>Sun, 25 Oct 2026 14:50:37 +0000</lastBuildDate>
			<image>
				<title>Школа179 - последние изменения</title>
				<link>https://ejudge.179.ru/wiki/</link>
				<url>https://ejudge.179.ru/wiki/image/wacko_logo.png</url>
				<width>108</width>
				<height>50</height>
			</image>
			<language>ru</language>
<item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=712</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>%%(wacko)
</pre></div><br><strong>Удалено:</strong><br>				<div class="deletions"><pre>%%(hl Python)
</pre></div>]]></description>
					<pubDate>Sat, 28 Jan 2017 22:06:11 +0000</pubDate>
				</item><item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=711</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>%%(hl Python)
</pre></div><br><strong>Удалено:</strong><br>				<div class="deletions"><pre>%%(hl php)
</pre></div>]]></description>
					<pubDate>Sat, 28 Jan 2017 22:04:53 +0000</pubDate>
				</item><item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=710</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>%%(hl php)
</pre></div><br><strong>Удалено:</strong><br>				<div class="deletions"><pre>%%(hl Python)
</pre></div>]]></description>
					<pubDate>Sat, 28 Jan 2017 22:01:42 +0000</pubDate>
				</item><item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=709</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>%%(hl Python)
import numpy as np
class SimpleSplitLineClassifier():
    _estimator_type = &quot;classifier&quot;
    def __init__(self):  # У нашего классификатора пока нет параметров
        pass
    def fit(self, X, y):  # Команда для обучения классификатора
        # Делаем проверки
        if len(X.shape) != 2:
            raise ValueError(&quot;Массив X должен быть
двумерным&quot;)
        if len(y.shape) != 1:
            raise ValueError(&quot;Массив y должен быть
одномерным&quot;)
        self.classes_ = sorted(set(y))  # Упорядочиваем классы для
ответов
        if len(self.classes_) != 2:
            raise ValueError(&quot;Массив y должен состоять ровно из
двух различных значений&quot;)
        if X.shape[0] != y.shape[0]:
            raise ValueError(&quot;В массиве X должно быть столько
строк, сколько в массиве y элементов&quot;)
        # Сохраняем данные, на которых мы обучались в своих атрибутах
        self.X_ = X
        self.y_ = y
        # Находим разделяющую прямую ax+by+c=0.
        # Для классификации мы будем подставлять точку (x,y) в
уравнение этой прямой,
        # если полученное значение больше или равно нулю, то
классифицируем в self.classes_[0], иначе - в self.classes_[1]
        self.a, self.b, self.c = 0, 0, 0  # Вы ведь уже научились
находить эту прямую?
        return self
    def predict(self, X):
        # Проверяем, что форма массива X для предсказания правильная
        if len(X.shape) != 2:
            raise ValueError(&quot;Массив X должен быть
двумерным&quot;)
        if X.shape[1] != self.X_.shape[1]:
            raise ValueError(&quot;В массиве X должно быть столько же
столбцов, сколько в массиве, на котором производилось обучение&quot;)
        # Классифицируем
        predictions = np.zeros(len(X))  # Вы ведь уже научились
определять ирисы?
        return predictions
    # Две вспомогательные функции на будущее
    def get_params(self, deep=True):  # Получить текущие параметры
классификатора (у нас их нет)
        return dict()
    def set_params(self, **parameters):  # Установить параметры
классификатора
        for parameter, value in parameters.items():
            self.setattr(parameter, value)
        return self
# Создаём классификатор
clf = SimpleSplitLineClassifier()
# Обучаем его
clf.fit(np.array( [ [1, 0], [1, 1], [-1, 0], [-1, 1] ] ), np.array([0,
0, 1, 1]))
# Предсказываем 
print(clf.predict(np.array( [ [1, 0], [2, 0] ] )))
class KFold:
    def __init__(self, n_splits=5, random_state=None):
        self.n_splits = n_splits
        self.random_state = random_state
    def split(self, X, y=None):
        if self.random_state is not None:
            np.random.seed(self.random_state)
        ...
        return ...
def accuracy_score(clf, X, y):
    prediction = clf.predict(X)
    accuracy = ...
    return accuracy
def cross_val_score(estimator, X, y, scoring, cv):
    ...
    return ...
cv_folder = KFold(n_splits=3, random_state=179)
print(cross_val_score(estimator=clf, X=x_train, y=y_train,
scoring=accuracy_score, cv=cv_folder))
&gt;&gt; [0.75 0.83 0.81]
%%
</pre></div><br><strong>Удалено:</strong><br>				<div class="deletions"><pre>##class SimpleSplitLineClassifier():##
    ##_estimator_type = &quot;classifier&quot;##
    ##def __init__(self):  # У нашего классификатора пока нет
параметров##
        ##pass##
    ##def fit(self, X, y):  # Команда для обучения классификатора##
        ### Делаем проверки##
        ##if len(X.shape) != 2:##
            ##raise ValueError(&quot;Массив X должен быть
двумерным&quot;)##
        ##if len(y.shape) != 1:##
            ##raise ValueError(&quot;Массив y должен быть
одномерным&quot;)##
        ##self.classes_ = sorted(set(y))  # Упорядочиваем классы для
ответов##
        ##if len(self.classes_) != 2:##
            ##raise ValueError(&quot;Массив y должен состоять ровно из
двух различных значений&quot;)##
        ##if X.shape[0] != y.shape[0]:##
            ##raise ValueError(&quot;В массиве X должно быть столько
строк, сколько в массиве y элементов&quot;)##
        ### Сохраняем данные, на которых мы обучались в своих
атрибутах##
        ##self.X_ = X##
        ##self.y_ = y##
        ### Находим разделяющую прямую ax+by+c=0.##
        ### Для классификации мы будем подставлять точку (x,y) в
уравнение этой прямой,##
        ### если полученное значение больше или равно нулю, то
классифицируем в self.classes_[0], иначе - в self.classes_[1]##
        ##self.a, self.b, self.c = 0, 0, 0  # Вы ведь уже научились
находить эту прямую?##
        ##return self##
    ##def predict(self, X):##
        ### Проверяем, что форма массива X для предсказания
правильная##
        ##if len(X.shape) != 2:##
            ##raise ValueError(&quot;Массив X должен быть
двумерным&quot;)##
        ##if X.shape[1] != self.X_.shape[1]:##
            ##raise ValueError(&quot;В массиве X должно быть столько
же столбцов, сколько в массиве, на котором производилось
обучение&quot;)##
        ### Классифицируем##
        ##predictions = np.zeros(len(X))  # Вы ведь уже научились
определять ирисы?##
        ##return predictions##
    ### Две вспомогательные функции на будущее##
    ##def get_params(self, deep=True):  # Получить текущие параметры
классификатора (у нас их нет)##
        ##return dict()##
    ##def set_params(self, **parameters):  # Установить параметры
классификатора##
        ##for parameter, value in parameters.items():##
            ##self.setattr(parameter, value)##
        ##return self##
### Создаём классификатор##
##clf = SimpleSplitLineClassifier()##
### Обучаем его##
##clf.fit(np.array( [ [1, 0], [1, 1], [-1, 0], [-1, 1] ] ),
np.array([0, 0, 1, 1]))##
### Предсказываем ##
##print(clf.predict(np.array( [ [1, 0], [2, 0] ] )))##
##class KFold:##
    ##def __init__(self, n_splits=5, random_state=None):##
        ##self.n_splits = n_splits##
        ##self.random_state = random_state##
    ##def split(self, X, y=None):##
        ##if self.random_state is not None:##
            ##np.random.seed(self.random_state)##
        ##...##
        ##return ...##
##def accuracy_score(clf, X, y):##
    ##prediction = clf.predict(X)##
    ##accuracy = ...##
    ##return accuracy##
##def cross_val_score(estimator, X, y, scoring, cv):##
    ##...##
    ##return ...##
##cv_folder = KFold(n_splits=3, random_state=179)##
##print(cross_val_score(estimator=clf, X=x_train, y=y_train,
scoring=accuracy_score, cv=cv_folder))##
##&gt;&gt; [0.75 0.83 0.81]##
</pre></div>]]></description>
					<pubDate>Tue, 03 Jan 2017 18:31:16 +0000</pubDate>
				</item><item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=639</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>##&gt;&gt; [0.75 0.83 0.81]##
</pre></div><br><strong>Удалено:</strong><br>				<div class="deletions"><pre>##&gt;&gt; [0.75 0.83 0.81]
</pre></div>]]></description>
					<pubDate>Tue, 03 Jan 2017 18:30:25 +0000</pubDate>
				</item><item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=638</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>##print(clf.predict(np.array( [ [1, 0], [2, 0] ] )))##
</pre></div><br><strong>Удалено:</strong><br>				<div class="deletions"><pre>##print(clf.predict(np.array([[1, 0], [2, 0]])))##
</pre></div>]]></description>
					<pubDate>Tue, 03 Jan 2017 18:29:58 +0000</pubDate>
				</item><item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=637</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>##clf.fit(np.array( [ [1, 0], [1, 1], [-1, 0], [-1, 1] ] ),
np.array([0, 0, 1, 1]))##
</pre></div><br><strong>Удалено:</strong><br>				<div class="deletions"><pre>##clf.fit(np.array([[1, 0], [1, 1], [-1, 0], [-1, 1]]), np.array([0,
0, 1, 1]))##
</pre></div>]]></description>
					<pubDate>Tue, 03 Jan 2017 11:27:28 +0000</pubDate>
				</item><item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=636</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>##class KFold:##
    ##def __init__(self, n_splits=5, random_state=None):##
        ##self.n_splits = n_splits##
        ##self.random_state = random_state##
    ##def split(self, X, y=None):##
        ##if self.random_state is not None:##
            ##np.random.seed(self.random_state)##
        ##...##
        ##return ...##
##def accuracy_score(clf, X, y):##
    ##prediction = clf.predict(X)##
    ##accuracy = ...##
    ##return accuracy##
##def cross_val_score(estimator, X, y, scoring, cv):##
    ##...##
    ##return ...##
##cv_folder = KFold(n_splits=3, random_state=179)##
##print(cross_val_score(estimator=clf, X=x_train, y=y_train,
scoring=accuracy_score, cv=cv_folder))##
##&gt;&gt; [0.75 0.83 0.81]
</pre></div>]]></description>
					<pubDate>Tue, 03 Jan 2017 11:21:20 +0000</pubDate>
				</item><item>
					<title>SergeyShashkov: </title>
					<link>/wiki/%D0%98%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0/%D0%90%D1%80%D1%85%D0%B8%D0%B2/20_17/11_%D0%911/matplotlib?revision_id=635</link>
					<guid isPermaLink="true">/wiki/%25D0%2598%25D0%25BD%25D1%2584%25D0%25BE%25D1%2580%25D0%25BC%25D0%25B0%25D1%2582%25D0%25B8%25D0%25BA%25D0%25B0/%25D0%2590%25D1%2580%25D1%2585%25D0%25B8%25D0%25B2/20_17/11%25D0%2591_1/matplotlib</guid>
					<description><![CDATA[
<br><strong>Добавлено:</strong><br>				<div class="additions"><pre>  12. Теперь можно пытаться разделять виды versicolor и virginica.
Здесь множества не разделяются, поэтому нужно придумать какой-нибудь
штраф за нахождение не в той полуплоскости и каким-нибудь образом
находить прямую с минимальным штрафов. Проверьте качество вашей
классификации при помощи уже реализованной кросс-валидации.
  13. Весь набор тестер-фолдер-валидатор очень удобно использовать для
проверки качества реализованного классификатора. Он пригодится и в
следующей задаче, поэтому после того, как всё заработает, причешите
код. Сделайте его красивым и удобным.
</pre></div>]]></description>
					<pubDate>Tue, 03 Jan 2017 11:11:59 +0000</pubDate>
				</item>		</channel>
	</rss>