<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl">
	<id>http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe%2F%C4%86wiczenia_10</id>
	<title>Uczenie maszynowe i sztuczne sieci neuronowe/Ćwiczenia 10 - Historia wersji</title>
	<link rel="self" type="application/atom+xml" href="http://brain.fuw.edu.pl/edu/index.php?action=history&amp;feed=atom&amp;title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe%2F%C4%86wiczenia_10"/>
	<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_10&amp;action=history"/>
	<updated>2026-04-28T03:05:36Z</updated>
	<subtitle>Historia wersji tej strony wiki</subtitle>
	<generator>MediaWiki 1.34.1</generator>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_10&amp;diff=7652&amp;oldid=prev</id>
		<title>Jarekz: /* Materiały */</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_10&amp;diff=7652&amp;oldid=prev"/>
		<updated>2018-03-21T16:30:17Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Materiały&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 16:30, 21 mar 2018&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l65&quot; &gt;Linia 65:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 65:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     Uwaga: To jest wersja uproszczona algorytmu wzorowana na&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     Uwaga: To jest wersja uproszczona algorytmu wzorowana na&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;            http&lt;/del&gt;://&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;research&lt;/del&gt;.microsoft.com/en-us/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;um&lt;/del&gt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;people&lt;/del&gt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;jplatt&lt;/del&gt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;smoTR&lt;/del&gt;.pdf&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;           https&lt;/ins&gt;://&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;www&lt;/ins&gt;.microsoft.com/en-us/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;research/wp-content&lt;/ins&gt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;uploads&lt;/ins&gt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2016&lt;/ins&gt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;02/tr-98-14&lt;/ins&gt;.pdf&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         Nie jest ani specjalnie elegancka ani szybka.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         Nie jest ani specjalnie elegancka ani szybka.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         Do praktycznych zastosowań zaleca się stosowanie zoptymalizowanych bibliotek:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         Do praktycznych zastosowań zaleca się stosowanie zoptymalizowanych bibliotek:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                LIBSVM   (http://www.csie.ntu.edu.tw/~cjlin/libsvm/)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                LIBSVM   (http://www.csie.ntu.edu.tw/~cjlin/libsvm/)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                SVMLight (http://svmlight.joachims.org/)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;                SVMLight (http://svmlight.joachims.org/)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;                &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;             lub sklearn&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;      &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_10&amp;diff=5029&amp;oldid=prev</id>
		<title>Jarekz o 14:15, 29 mar 2016</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_10&amp;diff=5029&amp;oldid=prev"/>
		<updated>2016-03-29T14:15:08Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pl&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;← poprzednia wersja&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #222; text-align: center;&quot;&gt;Wersja z 14:15, 29 mar 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Linia 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Uczenie_maszynowe_i_sztuczne_sieci_neuronowe_cw]]/SVM1&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Klasyfikacja za pomocą algorytmu wektorów wspierających (SVM)=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Klasyfikacja za pomocą algorytmu wektorów wspierających (SVM)=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Materiały ==&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Materiały ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l550&quot; &gt;Linia 550:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linia 551:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/source&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{hidden end}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{hidden end}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Uczenie_maszynowe_i_sztuczne_sieci_neuronowe_cw]]/SVM1&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
	<entry>
		<id>http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_10&amp;diff=849&amp;oldid=prev</id>
		<title>Jarekz: Utworzono nową stronę &quot;=Klasyfikacja za pomocą algorytmu wektorów wspierających (SVM)= == Materiały == Na tych ćwiczeniach zapoznamy się z zastosowaniem SVM do klasyfikacji. Poniżej zna...&quot;</title>
		<link rel="alternate" type="text/html" href="http://brain.fuw.edu.pl/edu/index.php?title=Uczenie_maszynowe_i_sztuczne_sieci_neuronowe/%C4%86wiczenia_10&amp;diff=849&amp;oldid=prev"/>
		<updated>2015-05-21T18:54:11Z</updated>

		<summary type="html">&lt;p&gt;Utworzono nową stronę &amp;quot;=Klasyfikacja za pomocą algorytmu wektorów wspierających (SVM)= == Materiały == Na tych ćwiczeniach zapoznamy się z zastosowaniem SVM do klasyfikacji. Poniżej zna...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nowa strona&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Klasyfikacja za pomocą algorytmu wektorów wspierających (SVM)=&lt;br /&gt;
== Materiały ==&lt;br /&gt;
Na tych ćwiczeniach zapoznamy się z zastosowaniem SVM do klasyfikacji.&lt;br /&gt;
Poniżej znajduje się moduł dostarczający kilku funkcji,  z których dziś będziemy korzystać. Proszę zapisać go w bieżącym katalogu.&lt;br /&gt;
&lt;br /&gt;
{{hidden begin|title=Kod modułu svm_modul.py}}&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#####################################################################&lt;br /&gt;
# definicje funkcji pomocniczych, których nie musisz modyfikować&lt;br /&gt;
#####################################################################&lt;br /&gt;
def rysujDaneGrup(X, y, marker, xlabel, ylabel,legend_list):&lt;br /&gt;
    '''X - macierz wartości wejściowych zorganizowana tak, że kolejne przykłady są&lt;br /&gt;
    w wierszach, kolumny to kolejne wynmiary  wejścia,&lt;br /&gt;
    y - wektor określający przynależność do grupy, indeksy tego wektora odpowiadają wireszom macierzy X,&lt;br /&gt;
    marker - zestaw markerów do oznaczania elementów grup, markerów powinno być tyle ile jest grup'''&lt;br /&gt;
    p=[]&lt;br /&gt;
    for i,g in enumerate(np.unique(y)):&lt;br /&gt;
        g = int(g)&lt;br /&gt;
        tmp =py.plot(X[np.where(y==g),0],X[np.where(y==g),1],marker[i])&lt;br /&gt;
        p.append(tmp[0])&lt;br /&gt;
    py.legend(p,legend_list)&lt;br /&gt;
    # Dodajemy napisy&lt;br /&gt;
    py.xlabel(xlabel)&lt;br /&gt;
    py.ylabel(ylabel)&lt;br /&gt;
    &lt;br /&gt;
def rysujPodzial(model, X):&lt;br /&gt;
    # wytworzymy siatkę punktów pokrywających obszar danych:&lt;br /&gt;
    N = 100 # ilość punktów siatki w jednym wymiarze&lt;br /&gt;
    os_x = np.linspace(X.min(),X.max(),N)&lt;br /&gt;
    klasa = np.zeros((N,N))&lt;br /&gt;
    for ix1, x1 in enumerate(os_x):&lt;br /&gt;
        for ix2, x2 in enumerate(os_x):&lt;br /&gt;
            XX = np.array([x1,x2]).reshape(1,2)&lt;br /&gt;
            klasa[ix1,ix2] = svmPredict(model, XX) # dla każdego punktu siatki obliczamy jego klasę&lt;br /&gt;
    &lt;br /&gt;
    x1_grid,x2_grid = np.meshgrid(os_x,os_x)&lt;br /&gt;
    py.contourf(x1_grid, x2_grid, klasa.T,2)   &lt;br /&gt;
            &lt;br /&gt;
    &lt;br /&gt;
def gaussianKernel(Xi,Xj,sigma=0.1):&lt;br /&gt;
    z = np.dot((Xi-Xj).T,(Xi-Xj))&lt;br /&gt;
    S = 2*sigma*sigma&lt;br /&gt;
    Z= z/S&lt;br /&gt;
    return np.exp(-Z)&lt;br /&gt;
    &lt;br /&gt;
def svmTrain(X, Y, C, kernelFunction, tol = 1e-3, max_passes = 5, sigma=0.1):&lt;br /&gt;
    '''VMTRAIN Trenuje klasyfikator  SVM za pomocą uproszczonego algorytmu SMO.&lt;br /&gt;
         X - macierz wejściowa  przykładów z ciągu uczącego wiersze - przyklady, kolumny - cechy&lt;br /&gt;
         Y - wektor etykiet klas {-1,1}&lt;br /&gt;
         C  - regularyzacja SVM&lt;br /&gt;
         tol - tolerancja na odstępstwa od wrunków KTT&lt;br /&gt;
         max_passes - ile iteracji bez zmian mnożników Lagrangaea wykonać zanim uznamy, że już nie ma co poprawiać&lt;br /&gt;
        kernelFunction - funkcja jądra, zaimplementowane są:&lt;br /&gt;
            - gaussianKernel&lt;br /&gt;
            - linearKernel&lt;br /&gt;
        sigma - standardowe odchylenie dla jądra gaussowskiego&lt;br /&gt;
    &lt;br /&gt;
    funkcja zwraca parametry doapsowanego modelu w słowniku model&lt;br /&gt;
    &lt;br /&gt;
    Uwaga: To jest wersja uproszczona algorytmu wzorowana na&lt;br /&gt;
            http://research.microsoft.com/en-us/um/people/jplatt/smoTR.pdf&lt;br /&gt;
        Nie jest ani specjalnie elegancka ani szybka.&lt;br /&gt;
        Do praktycznych zastosowań zaleca się stosowanie zoptymalizowanych bibliotek:&lt;br /&gt;
               LIBSVM   (http://www.csie.ntu.edu.tw/~cjlin/libsvm/)&lt;br /&gt;
               SVMLight (http://svmlight.joachims.org/)&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    '''&lt;br /&gt;
&lt;br /&gt;
    # Pobieramy rozmiary&lt;br /&gt;
    m,n = X.shape #m - ilość przykładów, n - wymiar wejścia&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
    # Zmienne&lt;br /&gt;
    alphas = np.zeros(m)&lt;br /&gt;
    b = 0&lt;br /&gt;
    E = np.zeros(m)&lt;br /&gt;
    passes = 0&lt;br /&gt;
    eta = 0&lt;br /&gt;
    L = 0&lt;br /&gt;
    H = 0&lt;br /&gt;
&lt;br /&gt;
    # Pre-compute the Kernel Matrix since our dataset is small&lt;br /&gt;
    # (in practice, optimized SVM packages that handle large datasets&lt;br /&gt;
    #  gracefully will _not_ do this)&lt;br /&gt;
    # &lt;br /&gt;
    # We have implemented optimized vectorized version of the Kernels here so&lt;br /&gt;
    # that the svm training will run faster.&lt;br /&gt;
    print 'Obliczam macierz jądra'&lt;br /&gt;
    if kernelFunction =='linearKernel':&lt;br /&gt;
        # to jądro można policzyć od razu dla wszystkich przykładów&lt;br /&gt;
        K = np.dot(X,X.T)&lt;br /&gt;
    else:&lt;br /&gt;
        # Jak nie możemy wymyśleć wektoryzacji obliczeń to&lt;br /&gt;
        # obliczamy każdy element macierzy jądra osobno&lt;br /&gt;
        K = np.zeros((m,m))&lt;br /&gt;
        for i in range(m):&lt;br /&gt;
            for j in range(i,m):&lt;br /&gt;
                 K[i,j] = gaussianKernel(X[i,:].T, X[j,:].T,sigma)&lt;br /&gt;
                 K[j,i] = K[i,j] #the matrix is symmetric&lt;br /&gt;
       &lt;br /&gt;
       &lt;br /&gt;
    print 'Trenuję ...'&lt;br /&gt;
    dots = 12&lt;br /&gt;
    while passes &amp;lt; max_passes:        &lt;br /&gt;
        num_changed_alphas = 0&lt;br /&gt;
        for i in range(m): #dla każdego przykładu z ciągu uczącego&lt;br /&gt;
            # obliczamy błąd predykcji dla wektora i&lt;br /&gt;
            E[i] = b + np.sum (alphas*Y*K[:,i]) - Y[i]&lt;br /&gt;
            # jeśli jest co poprawiać:&lt;br /&gt;
            if (( (Y[i]*E[i] &amp;lt; -tol) &amp;amp; (alphas[i] &amp;lt; C)) | ((Y[i]*E[i] &amp;gt; tol) &amp;amp; (alphas[i] &amp;gt; 0))):&lt;br /&gt;
            &lt;br /&gt;
                # In practice, there are many heuristics one can use to select&lt;br /&gt;
                # the i and j. In this simplified code, we select them randomly.&lt;br /&gt;
                j = np.floor(m * np.random.rand())&lt;br /&gt;
                while j == i:  # Make sure i \neq j&lt;br /&gt;
                    j = np.floor(m * np.random.rand())&lt;br /&gt;
            &lt;br /&gt;
                # Obliczamy błąd predykcji dla wektora j.&lt;br /&gt;
                E[j] = b + np.sum (alphas*Y*K[:,j]) - Y[j]&lt;br /&gt;
&lt;br /&gt;
                # Save old alphas&lt;br /&gt;
                alpha_i_old = alphas[i]&lt;br /&gt;
                alpha_j_old = alphas[j]&lt;br /&gt;
            &lt;br /&gt;
                # Oblicz przycięcia do pudełka [0,C] &lt;br /&gt;
                if (Y[i] == Y[j]):&lt;br /&gt;
                    L = np.max((0, alphas[j] + alphas[i] - C))&lt;br /&gt;
                    H = np.min((C, alphas[j] + alphas[i]))&lt;br /&gt;
                else:&lt;br /&gt;
                    L = np.max((0, alphas[j] - alphas[i]))&lt;br /&gt;
                    H = np.min((C, C + alphas[j] - alphas[i]))&lt;br /&gt;
                if (L ==    H):&lt;br /&gt;
                    # continue to next i. &lt;br /&gt;
                    continue&lt;br /&gt;
                # Compute eta by (15).&lt;br /&gt;
                eta = 2 * K[i,j] - K[i,i] - K[j,j]&lt;br /&gt;
                if (eta &amp;gt;= 0):&lt;br /&gt;
                    # continue to next i. &lt;br /&gt;
                    continue&lt;br /&gt;
                # Compute and clip new value for alpha j using (16) and (17).&lt;br /&gt;
                alphas[j] = alphas[j] - (Y[j] * (E[i] - E[j])) / eta&lt;br /&gt;
            &lt;br /&gt;
                # Clip &lt;br /&gt;
                alphas[j] = np.min ((H, alphas[j]))&lt;br /&gt;
                alphas[j] = np.max ((L, alphas[j]))&lt;br /&gt;
            &lt;br /&gt;
                #Check if change in alpha is significant&lt;br /&gt;
                if (np.abs(alphas[j] - alpha_j_old) &amp;lt; tol):&lt;br /&gt;
                    # continue to next i. &lt;br /&gt;
                    # replace anyway&lt;br /&gt;
                    alphas[j] = alpha_j_old&lt;br /&gt;
                    continue&lt;br /&gt;
            &lt;br /&gt;
                # Determine value for alpha i using (16). &lt;br /&gt;
                alphas[i] = alphas[i] + Y[i]*Y[j]*(alpha_j_old - alphas[j])&lt;br /&gt;
            &lt;br /&gt;
                # Compute b1 and b2 using (20) and (21) respectively. &lt;br /&gt;
                b1 = b - E[i] - Y[i] * (alphas[i] - alpha_i_old) *  K[i,j] - Y[j] * (alphas[j] - alpha_j_old) *  K[i,j].T&lt;br /&gt;
                b2 = b - E[j] - Y[i] * (alphas[i] - alpha_i_old) *  K[i,j] - Y[j] * (alphas[j] - alpha_j_old) *  K[j,j].T&lt;br /&gt;
&lt;br /&gt;
                # Compute b by (19). &lt;br /&gt;
                if ( (0 &amp;lt; alphas[i]) &amp;amp; (alphas[i] &amp;lt; C)):&lt;br /&gt;
                    b = b1&lt;br /&gt;
                elif (0 &amp;lt; alphas[j]) &amp;amp; (alphas[j] &amp;lt; C):&lt;br /&gt;
                    b = b2&lt;br /&gt;
                else:&lt;br /&gt;
                    b = (b1+b2)/2&lt;br /&gt;
                num_changed_alphas = num_changed_alphas + 1    &lt;br /&gt;
        if (num_changed_alphas == 0):&lt;br /&gt;
            passes = passes + 1&lt;br /&gt;
        else:&lt;br /&gt;
            passes = 0&lt;br /&gt;
        print num_changed_alphas&lt;br /&gt;
    print ' Gotowe! \n\n'&lt;br /&gt;
&lt;br /&gt;
    # Save the model&lt;br /&gt;
    idx = alphas &amp;gt; 0    &lt;br /&gt;
    model = {}&lt;br /&gt;
    model['X'] = X[idx,:]&lt;br /&gt;
    model['Y'] = Y[idx]&lt;br /&gt;
    model['kernelFunction'] = kernelFunction&lt;br /&gt;
    model['b'] = b&lt;br /&gt;
    model['alphas']= alphas[idx]&lt;br /&gt;
    model['w'] = (np.dot((alphas*Y).T, X)).T&lt;br /&gt;
    model['sigma'] = sigma&lt;br /&gt;
    print 'ilość wektorów wspierających: ', len(model['alphas'])&lt;br /&gt;
    return model&lt;br /&gt;
&lt;br /&gt;
def svmPredict(model,X):&lt;br /&gt;
    '''model - model otrzymany z funkcji svmTrain&lt;br /&gt;
     X - macierz m x n ,&lt;br /&gt;
                       w której wierszach są przykłady do sklasyfikowania (m)&lt;br /&gt;
                       każdy przykład ma wymiar n&lt;br /&gt;
     funkcja zwraca wektor pred - i-ty element to predykcja dla i-tego przykładu&lt;br /&gt;
    '''&lt;br /&gt;
    &lt;br /&gt;
    # pobieramy rozmiary:&lt;br /&gt;
    m,n = X.shape&lt;br /&gt;
    #print 'm,n',m,n&lt;br /&gt;
    # przygotowujemy tablice:&lt;br /&gt;
    pred = np.zeros(m) # predyktory&lt;br /&gt;
    margines = np.zeros(m)     # wartości marginesów&lt;br /&gt;
    if model['kernelFunction'] == 'linearKernel':&lt;br /&gt;
        margines = np.dot(X , model['w']) + model['b']&lt;br /&gt;
    elif model['kernelFunction'] =='gaussianKernel':&lt;br /&gt;
        for i in range(m): #ta pętla iteruje po przykładach z macierzy X&lt;br /&gt;
            for j in range(len(model['alphas'])): # ta pętlla iteruje po wektorach wspierających&lt;br /&gt;
                margines[i] += model['alphas'][j]*model['Y'][j]* gaussianKernel(X[i,:],model['X'][j,:],model['sigma'])&lt;br /&gt;
            margines[i] += model['b']&lt;br /&gt;
    else:&lt;br /&gt;
        print 'niezaimplementowane jądro '+ model['kernelFunction']&lt;br /&gt;
    &lt;br /&gt;
    pred[margines &amp;gt;= 0] =  1    &lt;br /&gt;
    pred[margines &amp;lt;  0] = -1&lt;br /&gt;
    &lt;br /&gt;
    return pred&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{hidden end}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Potrzebne będą nam też następujące zestawy danych:&lt;br /&gt;
[[Plik:Dane1.txt]], [[Plik:Dane2.txt]], [[Plik:Dane3.txt]].&lt;br /&gt;
Proszę pobrać te pliki i zapisać je w bieżącym katalogu.&lt;br /&gt;
&lt;br /&gt;
==Ćwiczenie 1: Dane separowalne liniowo==&lt;br /&gt;
Poniższy kod prezentuje zastosowanie SVM do problemu, który jest separowalny liniowo.&lt;br /&gt;
Wykonując poniższy kod proszę zwrócić uwagę na punkt należący do klasy1 o współrzędnych (0.09, 4).&lt;br /&gt;
&lt;br /&gt;
Jak pamiętamy z wykładu parametr C to współczynnik regularyzacji SVM, który karze za naruszanie marginesów. Proszę wykonać  kod dla C o wartościach {1,2,5,10,20,30,60,120}  i zaobserwować wyniki.&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
#importujemy potrzebne moduły i klasy&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from svm_modul import *&lt;br /&gt;
&lt;br /&gt;
#==================================================================&lt;br /&gt;
#                 Program&lt;br /&gt;
#==================================================================&lt;br /&gt;
&lt;br /&gt;
# wczytywanie danych&lt;br /&gt;
dane = np.loadtxt('Dane1.txt') # dane zorganizowane są w trzech kolumnach&lt;br /&gt;
N_przyk, N_wej = dane.shape &lt;br /&gt;
X = dane[:,0:2] # pierwsze dwie kolumny to wejście&lt;br /&gt;
y = dane[:,2] # trzecia kolumna to etykiety klas&lt;br /&gt;
&lt;br /&gt;
# narysujmy te dane&lt;br /&gt;
rysujDaneGrup(X, y, marker=('or','xb'), xlabel='x0', ylabel='x1',legend_list=('klasa0','klasa1'))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
# trenujemy model&lt;br /&gt;
model  = svmTrain(X, y, C=100, kernelFunction = 'linearKernel', tol = 1e-3, max_passes = 20,sigma = 10) &lt;br /&gt;
&lt;br /&gt;
# prezentujemy podział przestrzeni wejść reprezentowany przez model&lt;br /&gt;
rysujDaneGrup(X, y, marker=('or','xb'), xlabel='x0', ylabel='x1',legend_list=('klasa0','klasa1'))&lt;br /&gt;
rysujPodzial(model,X)&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Ćwiczenie 2: jądro Gaussowskie==&lt;br /&gt;
W poprzednim programie proszę zmodyfikować wywołanie &amp;lt;tt&amp;gt;svmTrain&amp;lt;/tt&amp;gt;:&lt;br /&gt;
*  podmienić funkcję jądra na &amp;lt;tt&amp;gt;'gaussianKernel'&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* ustawić C = 10&lt;br /&gt;
* zmieniać sigma na wartości: {0.1, 0.2, 0.4, 0.8, 1, 2, 4, 8}&lt;br /&gt;
&lt;br /&gt;
==Ćwiczenie 3: skomplikowany podział nieliniowy==&lt;br /&gt;
Przy pomocy kodu z ćwiczenia 2 proszę dobrać parametry C i sigma aby otrzymać sensownie wyglądający podział przestrzeni dla danych zawartych w pliku dane2.txt.&lt;br /&gt;
&lt;br /&gt;
==Ćwiczenie 4: automatyzacja dobierania parametrów C i sigma ==&lt;br /&gt;
W wielu prawdziwych zastosowaniach chcielibyśmy aby nasz wybór parametrów był optymalny a jednocześnie możliwie  obiektywny. &lt;br /&gt;
&lt;br /&gt;
Powszechnie stosowaną metodą jest przeszukanie przestrzeni parametrów (C,sigma). Generuje się siatkę wartości (C,sigma) i dla każdego punktu siatki:&lt;br /&gt;
# estymuje się model&lt;br /&gt;
# ocenia się jakość generalizacji &lt;br /&gt;
&lt;br /&gt;
Do oceny jakości w każdym punkcie siatki można zastosować albo  zbiór monitorujący albo metody typu leave-one-out.&lt;br /&gt;
&lt;br /&gt;
Uwaga: podział przestrzeni często wykonuje się w skali logarytmicznej.&lt;br /&gt;
&lt;br /&gt;
Ćwiczenie wykonamy dla zbioru uczącego z pliku dane3.txt.&lt;br /&gt;
&lt;br /&gt;
Musimy ten zbiór podzielić na dane do trenowania i dane do testowania np. w proporcji 3:1, Można to zrobić tak:&lt;br /&gt;
&amp;lt;source lang =python&amp;gt;&lt;br /&gt;
# wczytywanie danych&lt;br /&gt;
dane = np.loadtxt('dane3.txt') # dane zorganizowane są w trzech kolumnach&lt;br /&gt;
N_przyk, N_wej = dane.shape &lt;br /&gt;
X = dane[:,0:2] # pierwsze dwie kolumny to wejście&lt;br /&gt;
y = dane[:,2] # trzecia kolumna to etykiety klas&lt;br /&gt;
&lt;br /&gt;
#podział na zbiór uczący i testujący&lt;br /&gt;
grupa0, = np.where(y==-1)&lt;br /&gt;
grupa1, = np.where(y==1)&lt;br /&gt;
&lt;br /&gt;
# mieszamy kolejność indexów&lt;br /&gt;
np.random.shuffle(grupa0)&lt;br /&gt;
np.random.shuffle(grupa1)&lt;br /&gt;
&lt;br /&gt;
# kopiujemy dane do zbioru uczącego (pierwsze 75% grupy0 i grupy1)&lt;br /&gt;
Xu = X[np.concatenate((grupa0[0: int(0.75*len(grupa0))],grupa1[0:int(0.75*len(grupa0))]))]&lt;br /&gt;
yu = y[np.concatenate((grupa0[0: int(0.75*len(grupa0))],grupa1[0:int(0.75*len(grupa0))]))]&lt;br /&gt;
# kopiujemy dane do zbioru testowego (końcowe 25% grupy0 i grupy1)&lt;br /&gt;
Xt = X[np.concatenate((grupa0[int(0.75*len(grupa0)):], grupa1[int(0.75*len(grupa0)):]))]&lt;br /&gt;
yt = y[np.concatenate((grupa0[int(0.75*len(grupa0)):], grupa1[int(0.75*len(grupa0)):]))]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# narysujmy te dane&lt;br /&gt;
&lt;br /&gt;
rysujDaneGrup(Xu, yu, marker=('xr','xb'), xlabel='x0', ylabel='x1',legend_list=('klasa0','klasa1'))&lt;br /&gt;
rysujDaneGrup(Xt, yt, marker=('or','ob'), xlabel='x0', ylabel='x1',legend_list=('klasa0_test','klasa1_test'))&lt;br /&gt;
py.show()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mając taki podział danych możemy dopasować model SVM do części uczącej:&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
model  = svmTrain(Xu, yu, C=10, kernelFunction = 'gaussianKernel', tol = 1e-3, max_passes = 20,sigma = 0.5) &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A następnie ocenić jego jakość na części testowej (funkcja &amp;lt;tt&amp;gt;svmPredict&amp;lt;/tt&amp;gt; dostarczana jest przez moduł svm_modul.py):&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
TPR = np.sum(yt == svmPredict(model,Xt))/float(len(yt))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Proszę napisać program, który&lt;br /&gt;
* skanuje przestrzeń (C,sigma): C w zakresie od 0.1 do 100, sigma w zakresie od 0.1 do 10. Do wygenerowania zakresu ze skalą logarytmiczną można wykorzystać np. takie polecenie: &amp;lt;tt&amp;gt;zakresC = np.logspace(np.log2(0.1),np.log2(100),8, base=2)&amp;lt;/tt&amp;gt;&lt;br /&gt;
* znajduje najlepsze parametry&lt;br /&gt;
* rysuje podział przestrzeni dla najlepszych parametrów.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Dodatek: implementacja w oparciu o bibliotekę LIBSVM==&lt;br /&gt;
Do praktycznych zastosowań zaleca się stosowanie zoptymalizowanych bibliotek, np.  LIBSVM   (http://www.csie.ntu.edu.tw/~cjlin/libsvm/). &lt;br /&gt;
Poniżej prezentujemy przykłady implementacji ćwiczenia 3 i ćwiczenia 4 w oparciu o tą bibliotekę. Aby móc wykonać te programy potrzebna jest skompilowana biblioteka libsvm i moduły pythonowe svm.py oraz svmutil. Cały zestaw wraz z instrukcją komilacji można pobrać z http://www.csie.ntu.edu.tw/~cjlin/libsvm/#download. &lt;br /&gt;
Uwaga: w bibliotece tej jest nieco inna konwencja notacji jądra Gaussowskiego: &amp;lt;math&amp;gt;K(x,z) =\exp(-g ||x-z||^2)&amp;lt;/math&amp;gt;, tzn. parametr &amp;lt;math&amp;gt;g = \frac{1}{2 \sigma^2}&amp;lt;/math&amp;gt; &lt;br /&gt;
{{hidden begin|title= cwiczenie3}}&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
#importujemy potrzebne moduły i klasy&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from svm import *&lt;br /&gt;
from svmutil import *&lt;br /&gt;
&lt;br /&gt;
def rysujDaneGrup(X, y, marker, xlabel, ylabel,legend_list):&lt;br /&gt;
    '''X - macierz wartości wejściowych zorganizowana tak, że kolejne przykłady są&lt;br /&gt;
    w wierszach, kolumny to kolejne wynmiary  wejścia,&lt;br /&gt;
    y - wektor określający przynależność do grupy, indeksy tego wektora odpowiadają wireszom macierzy X,&lt;br /&gt;
    marker - zestaw markerów do oznaczania elementów grup, markerów powinno być tyle ile jest grup'''&lt;br /&gt;
    p=[]&lt;br /&gt;
    for i,g in enumerate(np.unique(y)):&lt;br /&gt;
        g = int(g)&lt;br /&gt;
        tmp =py.plot(X[np.where(y==g),0],X[np.where(y==g),1],marker[i])&lt;br /&gt;
        p.append(tmp[0])&lt;br /&gt;
    py.legend(p,legend_list)&lt;br /&gt;
    # Dodajemy napisy&lt;br /&gt;
    py.xlabel(xlabel)&lt;br /&gt;
    py.ylabel(ylabel)&lt;br /&gt;
&lt;br /&gt;
def rysujPodzial(model, X):&lt;br /&gt;
    # wytworzymy siatkę punktów pokrywających obszar danych:&lt;br /&gt;
    N = 100 # ilość punktów siatki w jednym wymiarze&lt;br /&gt;
    os_x = np.linspace(X.min(),X.max(),N)&lt;br /&gt;
    klasa = np.zeros((N,N))&lt;br /&gt;
    for ix1, x1 in enumerate(os_x):&lt;br /&gt;
        for ix2, x2 in enumerate(os_x):&lt;br /&gt;
            XX = [[x1,x2]]#np.array([x1,x2]).reshape(1,2)&lt;br /&gt;
            #print XX&lt;br /&gt;
            p_label, p_acc, p_val =svm_predict([0], XX, model, '-b 1')&lt;br /&gt;
            klasa[ix1,ix2] = p_label[0]&lt;br /&gt;
            &lt;br /&gt;
            #svmPredict(model, XX) # dla każdego punktu siatki obliczamy jego klasę&lt;br /&gt;
    &lt;br /&gt;
    x1_grid,x2_grid = np.meshgrid(os_x,os_x)&lt;br /&gt;
    py.contourf(x1_grid, x2_grid, klasa.T,2) &lt;br /&gt;
#==================================================================&lt;br /&gt;
#                 Program&lt;br /&gt;
#==================================================================&lt;br /&gt;
&lt;br /&gt;
# wczytywanie danych&lt;br /&gt;
dane = np.loadtxt('dane2.txt') # dane zorganizowane są w trzech kolumnach&lt;br /&gt;
N_przyk, N_wej = dane.shape &lt;br /&gt;
X = dane[:,0:2].tolist() # pierwsze dwie kolumny to wejście&lt;br /&gt;
y = dane[:,2].tolist() # trzecia kolumna to etykiety klas&lt;br /&gt;
prob  = svm_problem(y, X, isKernel=False)&lt;br /&gt;
param = svm_parameter('-t 2 -c 10  -g 50 -b 1 -q')&lt;br /&gt;
''''options':&lt;br /&gt;
    -s svm_type : set type of SVM (default 0)&lt;br /&gt;
        0 -- C-SVC&lt;br /&gt;
        1 -- nu-SVC&lt;br /&gt;
        2 -- one-class SVM&lt;br /&gt;
        3 -- epsilon-SVR&lt;br /&gt;
        4 -- nu-SVR&lt;br /&gt;
    -t kernel_type : set type of kernel function (default 2)&lt;br /&gt;
        0 -- linear: u'*v&lt;br /&gt;
        1 -- polynomial: (gamma*u'*v + coef0)^degree&lt;br /&gt;
        2 -- radial basis function: exp(-gamma*|u-v|^2)&lt;br /&gt;
        3 -- sigmoid: tanh(gamma*u'*v + coef0)&lt;br /&gt;
        4 -- precomputed kernel (kernel values in training_set_file)&lt;br /&gt;
    -d degree : set degree in kernel function (default 3)&lt;br /&gt;
    -g gamma : set gamma in kernel function (default 1/num_features)&lt;br /&gt;
    -r coef0 : set coef0 in kernel function (default 0)&lt;br /&gt;
    -c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)&lt;br /&gt;
     -n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)&lt;br /&gt;
    -p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)&lt;br /&gt;
    -m cachesize : set cache memory size in MB (default 100)&lt;br /&gt;
    -e epsilon : set tolerance of termination criterion (default 0.001)&lt;br /&gt;
    -h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)&lt;br /&gt;
    -b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)&lt;br /&gt;
    -wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)&lt;br /&gt;
    -v n: n-fold cross validation mode&lt;br /&gt;
    -q : quiet mode (no outputs)&lt;br /&gt;
    '''&lt;br /&gt;
m = svm_train(prob, param)&lt;br /&gt;
p_label, p_acc, p_val = svm_predict(y, X, m, '-b 1')&lt;br /&gt;
ACC, MSE, SCC = evaluations(y, p_label)&lt;br /&gt;
&lt;br /&gt;
print ACC, MSE, SCC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# prezentujemy podział przestrzeni wejść reprezentowany przez model&lt;br /&gt;
rysujDaneGrup(np.array(X), np.array(y), marker=('or','xb'), xlabel='x0', ylabel='x1',legend_list=('klasa0','klasa1'))&lt;br /&gt;
rysujPodzial(m,np.array(X))&lt;br /&gt;
&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{hidden end}}&lt;br /&gt;
&lt;br /&gt;
{{hidden begin|title= cwiczenie4}}&lt;br /&gt;
&amp;lt;source lang = python&amp;gt;&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
#importujemy potrzebne moduły i klasy&lt;br /&gt;
import numpy as np&lt;br /&gt;
import pylab as py&lt;br /&gt;
from svm import *&lt;br /&gt;
from svmutil import *&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rysujDaneGrup(X, y, marker, xlabel, ylabel,legend_list):&lt;br /&gt;
    '''X - macierz wartości wejściowych zorganizowana tak, że kolejne przykłady są&lt;br /&gt;
    w wierszach, kolumny to kolejne wynmiary  wejścia,&lt;br /&gt;
    y - wektor określający przynależność do grupy, indeksy tego wektora odpowiadają wireszom macierzy X,&lt;br /&gt;
    marker - zestaw markerów do oznaczania elementów grup, markerów powinno być tyle ile jest grup'''&lt;br /&gt;
    p=[]&lt;br /&gt;
    for i,g in enumerate(np.unique(y)):&lt;br /&gt;
        g = int(g)&lt;br /&gt;
        tmp =py.plot(X[np.where(y==g),0],X[np.where(y==g),1],marker[i])&lt;br /&gt;
        p.append(tmp[0])&lt;br /&gt;
    py.legend(p,legend_list)&lt;br /&gt;
    # Dodajemy napisy&lt;br /&gt;
    py.xlabel(xlabel)&lt;br /&gt;
    py.ylabel(ylabel)&lt;br /&gt;
&lt;br /&gt;
def rysujPodzial(model, X):&lt;br /&gt;
    # wytworzymy siatkę punktów pokrywających obszar danych:&lt;br /&gt;
    N = 100 # ilość punktów siatki w jednym wymiarze&lt;br /&gt;
    os_x = np.linspace(X.min(),X.max(),N)&lt;br /&gt;
    klasa = np.zeros((N,N))&lt;br /&gt;
    for ix1, x1 in enumerate(os_x):&lt;br /&gt;
        for ix2, x2 in enumerate(os_x):&lt;br /&gt;
            XX = [[x1,x2]]#np.array([x1,x2]).reshape(1,2)&lt;br /&gt;
            #print XX&lt;br /&gt;
            p_label, p_acc, p_val =svm_predict([0], XX, model, '-b 1')&lt;br /&gt;
            klasa[ix1,ix2] = p_label[0]&lt;br /&gt;
            &lt;br /&gt;
            #svmPredict(model, XX) # dla każdego punktu siatki obliczamy jego klasę&lt;br /&gt;
    &lt;br /&gt;
    x1_grid,x2_grid = np.meshgrid(os_x,os_x)&lt;br /&gt;
    py.contourf(x1_grid, x2_grid, klasa.T,2) &lt;br /&gt;
#==================================================================&lt;br /&gt;
#                 Program&lt;br /&gt;
#==================================================================&lt;br /&gt;
&lt;br /&gt;
# wczytywanie danych&lt;br /&gt;
dane = np.loadtxt('dane3.txt') # dane zorganizowane są w trzech kolumnach&lt;br /&gt;
N_przyk, N_wej = dane.shape &lt;br /&gt;
X = dane[:,0:2] # pierwsze dwie kolumny to wejście&lt;br /&gt;
y = dane[:,2] # trzecia kolumna to etykiety klas&lt;br /&gt;
&lt;br /&gt;
#podział na zbiór uczący i testujący&lt;br /&gt;
grupa0, = np.where(y==-1)&lt;br /&gt;
grupa1, = np.where(y==1)&lt;br /&gt;
&lt;br /&gt;
# mieszamy kolejność indexów&lt;br /&gt;
np.random.shuffle(grupa0)&lt;br /&gt;
np.random.shuffle(grupa1)&lt;br /&gt;
&lt;br /&gt;
# kopiujemy dane do zbioru uczącego (pierwsze 75% grupy0 i grupy1)&lt;br /&gt;
Xu = X[np.concatenate((grupa0[0: int(0.75*len(grupa0))],grupa1[0:int(0.75*len(grupa0))]))]&lt;br /&gt;
yu = y[np.concatenate((grupa0[0: int(0.75*len(grupa0))],grupa1[0:int(0.75*len(grupa0))]))]&lt;br /&gt;
# kopiujemy dane do zbioru testowego (końcowe 25% grupy0 i grupy1)&lt;br /&gt;
Xt = X[np.concatenate((grupa0[int(0.75*len(grupa0)):], grupa1[int(0.75*len(grupa0)):]))]&lt;br /&gt;
yt = y[np.concatenate((grupa0[int(0.75*len(grupa0)):], grupa1[int(0.75*len(grupa0)):]))]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# narysujmy te dane&lt;br /&gt;
&lt;br /&gt;
rysujDaneGrup(Xu, yu, marker=('xr','xb'), xlabel='x0', ylabel='x1',legend_list=('klasa0','klasa1'))&lt;br /&gt;
rysujDaneGrup(Xt, yt, marker=('or','ob'), xlabel='x0', ylabel='x1',legend_list=('klasa0_test','klasa1_test'))&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
# trenujemy model&lt;br /&gt;
yul = yu.tolist()&lt;br /&gt;
Xul = Xu.tolist()&lt;br /&gt;
ytl = yt.tolist()&lt;br /&gt;
Xtl = Xt.tolist()&lt;br /&gt;
prob  = svm_problem(yul, Xul, isKernel=False)&lt;br /&gt;
Ng = 20&lt;br /&gt;
zakresC = np.logspace(np.log2(0.1),np.log2(10),20, base=2)&lt;br /&gt;
zakresS = np.logspace(np.log2(0.1),np.log2(10),10, base=2)&lt;br /&gt;
bestC = 0&lt;br /&gt;
bestS = 0&lt;br /&gt;
bestTPR =0&lt;br /&gt;
TPR=np.zeros((20,10))&lt;br /&gt;
for i,C in enumerate(zakresC):&lt;br /&gt;
    for j,S in enumerate(zakresS):&lt;br /&gt;
        param_string = '-t 2 -q -b 1 -e 0.00001 -c '+str(C)+' -g '+str(S)&lt;br /&gt;
        param = svm_parameter(param_string)&lt;br /&gt;
        m = svm_train(prob, param)&lt;br /&gt;
        p_label, p_acc, p_val = svm_predict(ytl, Xtl, m, '-b 1')&lt;br /&gt;
        TPR[i,j] = np.sum(np.array(ytl)==np.array(p_label))/float(len(ytl))&lt;br /&gt;
        if TPR[i,j]&amp;gt;bestTPR:&lt;br /&gt;
            bestTPR = TPR[i,j]&lt;br /&gt;
            bestModel = m&lt;br /&gt;
            bestC = C&lt;br /&gt;
            bestS = S&lt;br /&gt;
        print C,S,TPR[i,j]&lt;br /&gt;
# prezentujemy podział przestrzeni wejść reprezentowany przez model&lt;br /&gt;
rysujDaneGrup(X, y, marker=('or','xb'), xlabel='x0', ylabel='x1',legend_list=('klasa0','klasa1'))&lt;br /&gt;
rysujPodzial(bestModel,X)&lt;br /&gt;
py.title('C: '+str(bestC)+' S: '+str(bestS))&lt;br /&gt;
py.figure()&lt;br /&gt;
&lt;br /&gt;
py.pcolor(zakresC,zakresS,(TPR.T))&lt;br /&gt;
py.xlabel('C')&lt;br /&gt;
py.ylabel('S')&lt;br /&gt;
&lt;br /&gt;
py.colorbar()&lt;br /&gt;
py.show()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{hidden end}}&lt;/div&gt;</summary>
		<author><name>Jarekz</name></author>
		
	</entry>
</feed>