Bibliotek chefboost do tworenia drzew decyzyjnych



Bibliotek stworzona przez naukoców MIT, która w bardzo prosty sposób (od strony programistycznej) pozwala analizować dane i tworzyć drzewa decyzyjne.

Dane wejsciowe na jakich tworzono drzewo decyzyjne.

Day Outlook Temperature Humidity Wind Decision
2SunnyHotHighStrogNo
6RainCoolNormalStrongNo
7OvercastCoolNormalStrongYes
11SunnyMildHighStrongYes
12OvercastMildHighStrongYes
14RainMildHighStrongNo


Do dyspozycji są cztery algorytmy, na bazie których można tworzyć drzewa decyzyjne:
1. ID3 - miarą jest entropia, przyrost informacji.
2. C4.5 - miarą jest entropia, współczynnik przyrostu (gain).
3. CART - indeks Giniego, suma kwadratów pradopodobieństwa każdej klasy.
4. CHAID - miarą jest test zgodności chi - kwadrat.
5. Regression - miarą jest standardowe odchylenie.


ID3 to pierwzy algorytm, który ma swoje wady. Nie radzi sobie z ciąggłymi danymi (liczbowymi). Zakłąda że wszystkie reordy są wypełnione. Tworzy drzewa dużego rozmiaru. Brak odporności na OVERFITTING (nie radzi sobie z dnymi zaburzającymi ogólną informację). C4.5 to rozszerzenie algorytmu ID3. Radzi sobie z brakami wartości dla wybranych atrybutów. Radzi sobie z wartosciami ciągłymi (liczbowymi). Głównym atutem C4.5 jest przycinanie (ang. purring) co jest działaniem korygującym nadmierny rozrost drzewa.

Metoda ta działa w sposób następujący:
1. działa od liści w kierunku bottomUp.
2. dla każdego węzła (znjc jego poddrzewo) obicza heurystycznie wartość przewidywanego błędu dla aktualnego drzewa.
3. Następnie oblicza wartośćprzewidywanego błędu dla sytuacji, gdyby analizowane poddrzewo zstąpić liściem.
4. porównuje powyższe wartości i ewentualnie zamienia węzeł na liść, informując o tym przodków.


	from chefboost import Chefboost as chef
	import pandas as pd

	df = pd.read_csv("dataset/golf.txt")	# do ramki danych grywamy zawartość pliku tektowego
	config = {'algorithm': 'C4.5'}			# określamy rodzaj algorytmu którym będziemy realizować drzewo
	model = chef.fit(df, config = config, target_label = 'Decision') # do zmiennej zapisujemy drzewo decyzyjne
	


Efektem jest drzewo decyzyjne, które zapisywane jest w pliku w formacie warunku if w lokalizacji tests/outputs/rules. Dla przykaldowych danych stworyłnastępującą postać drzewa.

	def findDecision(Outlook, Temperature, Humidity, Wind):
	   if Outlook == 'Rain':
		  if Wind == 'Weak':
			 return 'Yes'
		  elif Wind == 'Strong':
			 return 'No'
		  else:
			 return 'No'
	   elif Outlook == 'Sunny':
		  if Humidity == 'High':
			 return 'No'
		  elif Humidity == 'Normal':
			 return 'Yes'
		  else:
			 return 'Yes'
	   elif Outlook == 'Overcast':
		  return 'Yes'
	   else:
		  return 'Yes'
		


Po stworzeniu drzewa decyzyjnego można następnie testować kolejne atrybuty danych w następujący sposób.
	
	prediction = chef.predict(model,param=['Sunny','Hot','High','Weak'])
	
	


Jeżeli jużraz stworzyłeś drzewo decyzyjne, możesz je wykorzystać ponownie, be konieczności tworenia go na nowo.
	
	moduleName = "outputs/rules/rules" #this will load outputs/rules/rules.py
	tree = chef.restoreTree(moduleName)
	prediction = tree.findDecision(['Sunny', 'Hot', 'High', 'Weak'])
	
	


Istnieje możliwość zapisania drzewa decyzyjnego do pliku.
	
	chef.save_model(model, "model.pkl")	
	
	


Istnieje możliwość wgrania drzewa decyzyjnego w kolejnych projektach.
	
	model = chef.load_model("model.pkl")
	prediction = chef.predict(model, ['Sunny',85,85,'Weak'])	
	
	
:)