import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import tree
from sklearn.metrics import accuracy_score, classification_report, confusion_matrix
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.svm import LinearSVC
from sklearn.ensemble import RandomForestClassifier
from warnings import filterwarnings
filterwarnings(action='ignore')
iris_data = pd.read_csv('iris.csv')
iris_data
Id | SepalLengthCm | SepalWidthCm | PetalLengthCm | PetalWidthCm | Species | |
---|---|---|---|---|---|---|
0 | 1 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 2 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 3 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
3 | 4 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
4 | 5 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
... | ... | ... | ... | ... | ... | ... |
145 | 146 | 6.7 | 3.0 | 5.2 | 2.3 | Iris-virginica |
146 | 147 | 6.3 | 2.5 | 5.0 | 1.9 | Iris-virginica |
147 | 148 | 6.5 | 3.0 | 5.2 | 2.0 | Iris-virginica |
148 | 149 | 6.2 | 3.4 | 5.4 | 2.3 | Iris-virginica |
149 | 150 | 5.9 | 3.0 | 5.1 | 1.8 | Iris-virginica |
150 rows × 6 columns
iris_data.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 150 entries, 0 to 149 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Id 150 non-null int64 1 SepalLengthCm 150 non-null float64 2 SepalWidthCm 150 non-null float64 3 PetalLengthCm 150 non-null float64 4 PetalWidthCm 150 non-null float64 5 Species 150 non-null object dtypes: float64(4), int64(1), object(1) memory usage: 7.2+ KB
iris_data['SepalLengthCm'].max(), iris_data['SepalLengthCm'].min()
(7.9, 4.3)
iris_data['SepalWidthCm'].max(), iris_data['SepalWidthCm'].min()
(4.4, 2.0)
iris_data['PetalLengthCm'].max(), iris_data['PetalLengthCm'].min()
(6.9, 1.0)
iris_data['PetalWidthCm'].max(), iris_data['PetalWidthCm'].min()
(2.5, 0.1)
iris_data['Species'].describe()
count 150 unique 3 top Iris-setosa freq 50 Name: Species, dtype: object
iris_data['Species'].value_counts()
Iris-setosa 50 Iris-versicolor 50 Iris-virginica 50 Name: Species, dtype: int64
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
ax.axis('equal')
l = ['Versicolor', 'Setosa', 'Virginica']
s = [50,50,50]
ax.pie(s, labels = l,autopct='%1.2f%%')
plt.show()
plt.figure(1)
plt.boxplot([iris_data['PetalLengthCm']])
plt.title('Outliers if any in PetalLengthCm')
plt.figure(2)
plt.boxplot([iris_data['PetalWidthCm']])
plt.title('Outliers if any in PetalWidthCm')
plt.figure(3)
plt.boxplot([iris_data['SepalLengthCm']])
plt.title('Outliers if any in SepalLengthCm')
plt.figure(4)
plt.boxplot([iris_data['SepalWidthCm']])
plt.title('Outliers if any in SepalWidthCm')
plt.show()
plt.figure(1)
iris_data['PetalLengthCm'].hist()
plt.title('Histogram distribution of PetalLengthCm')
plt.figure(2)
iris_data['PetalWidthCm'].hist()
plt.title('Histogram distribution of PetalWidthCm')
plt.figure(3)
iris_data['SepalLengthCm'].hist()
plt.title('Histogram distribution of SepalLengthCm')
plt.figure(4)
iris_data['SepalWidthCm'].hist()
plt.title('Histogram distribution of SepalWidthCm')
plt.show()
plt.figure(1)
iris_data['PetalLengthCm'].plot(kind ='density')
plt.title('Density Plot of PetalLengthCm')
plt.figure(2)
iris_data['PetalWidthCm'].plot(kind ='density')
plt.title('Density Plot of PetalWidthCm')
plt.figure(3)
iris_data['SepalLengthCm'].plot(kind ='density')
plt.title('Density Plot of SepalLengthCm')
plt.figure(4)
iris_data['SepalWidthCm'].plot(kind ='density')
plt.title('Density Plot of SepalWidthCm')
plt.show()
plt.figure(figsize=(15,10))
plt.subplot(2,2,1)
sns.violinplot(x='Species',y='PetalLengthCm',data=iris_data)
plt.title('Species vs PetalLengthCm')
plt.subplot(2,2,2)
sns.violinplot(x='Species',y='PetalWidthCm',data=iris_data)
plt.title('Species vs PetalWidthCm')
plt.subplot(2,2,3)
sns.violinplot(x='Species',y='SepalLengthCm',data=iris_data)
plt.title('Species vs SepalLengthCm')
plt.subplot(2,2,4)
sns.violinplot(x='Species',y='SepalWidthCm',data=iris_data)
plt.title('Species vs SepalWidthCm')
Text(0.5, 1.0, 'Species vs SepalWidthCm')
iris_data.iloc[:,1:-1].corr()
SepalLengthCm | SepalWidthCm | PetalLengthCm | PetalWidthCm | |
---|---|---|---|---|
SepalLengthCm | 1.000000 | -0.109369 | 0.871754 | 0.817954 |
SepalWidthCm | -0.109369 | 1.000000 | -0.420516 | -0.356544 |
PetalLengthCm | 0.871754 | -0.420516 | 1.000000 | 0.962757 |
PetalWidthCm | 0.817954 | -0.356544 | 0.962757 | 1.000000 |
sns.heatmap(iris_data.iloc[:,1:-1].corr(), annot=True)
<AxesSubplot:>
sns.pairplot(iris_data, hue="Species")
<seaborn.axisgrid.PairGrid at 0x2690b753460>
x = iris_data.iloc[:, 1:-1]
y = iris_data.Species
x_train, x_test, y_train, y_test = train_test_split(x, y,test_size=0.3)
model_1 = DecisionTreeClassifier()
model_1.fit(x_train, y_train)
DecisionTreeClassifier()
y_pred = model_1.predict(x_test)
score = accuracy_score(y_pred, y_test)
score
0.9555555555555556
y_pred
array(['Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-virginica', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-setosa', 'Iris-versicolor', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa'], dtype=object)
print(classification_report(y_pred, y_test))
precision recall f1-score support Iris-setosa 1.00 1.00 1.00 15 Iris-versicolor 0.93 0.93 0.93 14 Iris-virginica 0.94 0.94 0.94 16 accuracy 0.96 45 macro avg 0.96 0.96 0.96 45 weighted avg 0.96 0.96 0.96 45
plt.figure(figsize=(15, 10))
tree.plot_tree(model_1, filled=True)
[Text(0.3076923076923077, 0.9166666666666666, 'X[2] <= 2.6\ngini = 0.666\nsamples = 105\nvalue = [35, 36, 34]'), Text(0.23076923076923078, 0.75, 'gini = 0.0\nsamples = 35\nvalue = [35, 0, 0]'), Text(0.38461538461538464, 0.75, 'X[2] <= 4.75\ngini = 0.5\nsamples = 70\nvalue = [0, 36, 34]'), Text(0.15384615384615385, 0.5833333333333334, 'X[3] <= 1.65\ngini = 0.057\nsamples = 34\nvalue = [0, 33, 1]'), Text(0.07692307692307693, 0.4166666666666667, 'gini = 0.0\nsamples = 33\nvalue = [0, 33, 0]'), Text(0.23076923076923078, 0.4166666666666667, 'gini = 0.0\nsamples = 1\nvalue = [0, 0, 1]'), Text(0.6153846153846154, 0.5833333333333334, 'X[3] <= 1.75\ngini = 0.153\nsamples = 36\nvalue = [0, 3, 33]'), Text(0.38461538461538464, 0.4166666666666667, 'X[0] <= 6.2\ngini = 0.48\nsamples = 5\nvalue = [0, 2, 3]'), Text(0.3076923076923077, 0.25, 'gini = 0.0\nsamples = 2\nvalue = [0, 0, 2]'), Text(0.46153846153846156, 0.25, 'X[0] <= 6.95\ngini = 0.444\nsamples = 3\nvalue = [0, 2, 1]'), Text(0.38461538461538464, 0.08333333333333333, 'gini = 0.0\nsamples = 2\nvalue = [0, 2, 0]'), Text(0.5384615384615384, 0.08333333333333333, 'gini = 0.0\nsamples = 1\nvalue = [0, 0, 1]'), Text(0.8461538461538461, 0.4166666666666667, 'X[2] <= 4.85\ngini = 0.062\nsamples = 31\nvalue = [0, 1, 30]'), Text(0.7692307692307693, 0.25, 'X[1] <= 3.1\ngini = 0.444\nsamples = 3\nvalue = [0, 1, 2]'), Text(0.6923076923076923, 0.08333333333333333, 'gini = 0.0\nsamples = 2\nvalue = [0, 0, 2]'), Text(0.8461538461538461, 0.08333333333333333, 'gini = 0.0\nsamples = 1\nvalue = [0, 1, 0]'), Text(0.9230769230769231, 0.25, 'gini = 0.0\nsamples = 28\nvalue = [0, 0, 28]')]
color_class = {
'Iris-setosa' : 'red',
'Iris-versicolor' : 'green',
'Iris-virginica' : 'blue'
}
colors = [color_class[label] for label in y_pred]
plt.scatter(x_test.SepalLengthCm, x_test.PetalLengthCm, c=colors)
plt.xlabel('Sepal Length')
plt.ylabel('Petal Length')
plt.title('Predicted Species using Decision Tree Model')
legend_entries = [
plt.Line2D([0], [0], marker='o', color='w', markerfacecolor=color, markersize=10, label=label)
for label, color in color_class.items()
]
plt.legend(handles=legend_entries, title='Species')
plt.show()
iris_setosa_dataset = iris_data[iris_data.PetalLengthCm <= 2.45]
iris_setosa_dataset.to_excel('iris_setosa_dataset.xlsx',index=False)
iris_setosa_dataset.to_csv('iris_setosa_dataset.csv',index=False)
pd.read_excel('iris_setosa_dataset.xlsx')
Id | SepalLengthCm | SepalWidthCm | PetalLengthCm | PetalWidthCm | Species | |
---|---|---|---|---|---|---|
0 | 1 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 2 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 3 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
3 | 4 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
4 | 5 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
5 | 6 | 5.4 | 3.9 | 1.7 | 0.4 | Iris-setosa |
6 | 7 | 4.6 | 3.4 | 1.4 | 0.3 | Iris-setosa |
7 | 8 | 5.0 | 3.4 | 1.5 | 0.2 | Iris-setosa |
8 | 9 | 4.4 | 2.9 | 1.4 | 0.2 | Iris-setosa |
9 | 10 | 4.9 | 3.1 | 1.5 | 0.1 | Iris-setosa |
10 | 11 | 5.4 | 3.7 | 1.5 | 0.2 | Iris-setosa |
11 | 12 | 4.8 | 3.4 | 1.6 | 0.2 | Iris-setosa |
12 | 13 | 4.8 | 3.0 | 1.4 | 0.1 | Iris-setosa |
13 | 14 | 4.3 | 3.0 | 1.1 | 0.1 | Iris-setosa |
14 | 15 | 5.8 | 4.0 | 1.2 | 0.2 | Iris-setosa |
15 | 16 | 5.7 | 4.4 | 1.5 | 0.4 | Iris-setosa |
16 | 17 | 5.4 | 3.9 | 1.3 | 0.4 | Iris-setosa |
17 | 18 | 5.1 | 3.5 | 1.4 | 0.3 | Iris-setosa |
18 | 19 | 5.7 | 3.8 | 1.7 | 0.3 | Iris-setosa |
19 | 20 | 5.1 | 3.8 | 1.5 | 0.3 | Iris-setosa |
20 | 21 | 5.4 | 3.4 | 1.7 | 0.2 | Iris-setosa |
21 | 22 | 5.1 | 3.7 | 1.5 | 0.4 | Iris-setosa |
22 | 23 | 4.6 | 3.6 | 1.0 | 0.2 | Iris-setosa |
23 | 24 | 5.1 | 3.3 | 1.7 | 0.5 | Iris-setosa |
24 | 25 | 4.8 | 3.4 | 1.9 | 0.2 | Iris-setosa |
25 | 26 | 5.0 | 3.0 | 1.6 | 0.2 | Iris-setosa |
26 | 27 | 5.0 | 3.4 | 1.6 | 0.4 | Iris-setosa |
27 | 28 | 5.2 | 3.5 | 1.5 | 0.2 | Iris-setosa |
28 | 29 | 5.2 | 3.4 | 1.4 | 0.2 | Iris-setosa |
29 | 30 | 4.7 | 3.2 | 1.6 | 0.2 | Iris-setosa |
30 | 31 | 4.8 | 3.1 | 1.6 | 0.2 | Iris-setosa |
31 | 32 | 5.4 | 3.4 | 1.5 | 0.4 | Iris-setosa |
32 | 33 | 5.2 | 4.1 | 1.5 | 0.1 | Iris-setosa |
33 | 34 | 5.5 | 4.2 | 1.4 | 0.2 | Iris-setosa |
34 | 35 | 4.9 | 3.1 | 1.5 | 0.1 | Iris-setosa |
35 | 36 | 5.0 | 3.2 | 1.2 | 0.2 | Iris-setosa |
36 | 37 | 5.5 | 3.5 | 1.3 | 0.2 | Iris-setosa |
37 | 38 | 4.9 | 3.1 | 1.5 | 0.1 | Iris-setosa |
38 | 39 | 4.4 | 3.0 | 1.3 | 0.2 | Iris-setosa |
39 | 40 | 5.1 | 3.4 | 1.5 | 0.2 | Iris-setosa |
40 | 41 | 5.0 | 3.5 | 1.3 | 0.3 | Iris-setosa |
41 | 42 | 4.5 | 2.3 | 1.3 | 0.3 | Iris-setosa |
42 | 43 | 4.4 | 3.2 | 1.3 | 0.2 | Iris-setosa |
43 | 44 | 5.0 | 3.5 | 1.6 | 0.6 | Iris-setosa |
44 | 45 | 5.1 | 3.8 | 1.9 | 0.4 | Iris-setosa |
45 | 46 | 4.8 | 3.0 | 1.4 | 0.3 | Iris-setosa |
46 | 47 | 5.1 | 3.8 | 1.6 | 0.2 | Iris-setosa |
47 | 48 | 4.6 | 3.2 | 1.4 | 0.2 | Iris-setosa |
48 | 49 | 5.3 | 3.7 | 1.5 | 0.2 | Iris-setosa |
49 | 50 | 5.0 | 3.3 | 1.4 | 0.2 | Iris-setosa |
iris_versicolor_dataset = iris_data[(iris_data['PetalLengthCm'] < 5) & (iris_data['PetalLengthCm'] > 3)]
iris_versicolor_dataset.to_excel('iris_versicolor_dataset.xlsx',index=False)
iris_versicolor_dataset.to_csv('iris_versicolor_dataset.csv',index=False)
pd.read_excel('iris_versicolor_dataset.xlsx')
Id | SepalLengthCm | SepalWidthCm | PetalLengthCm | PetalWidthCm | Species | |
---|---|---|---|---|---|---|
0 | 51 | 7.0 | 3.2 | 4.7 | 1.4 | Iris-versicolor |
1 | 52 | 6.4 | 3.2 | 4.5 | 1.5 | Iris-versicolor |
2 | 53 | 6.9 | 3.1 | 4.9 | 1.5 | Iris-versicolor |
3 | 54 | 5.5 | 2.3 | 4.0 | 1.3 | Iris-versicolor |
4 | 55 | 6.5 | 2.8 | 4.6 | 1.5 | Iris-versicolor |
5 | 56 | 5.7 | 2.8 | 4.5 | 1.3 | Iris-versicolor |
6 | 57 | 6.3 | 3.3 | 4.7 | 1.6 | Iris-versicolor |
7 | 58 | 4.9 | 2.4 | 3.3 | 1.0 | Iris-versicolor |
8 | 59 | 6.6 | 2.9 | 4.6 | 1.3 | Iris-versicolor |
9 | 60 | 5.2 | 2.7 | 3.9 | 1.4 | Iris-versicolor |
10 | 61 | 5.0 | 2.0 | 3.5 | 1.0 | Iris-versicolor |
11 | 62 | 5.9 | 3.0 | 4.2 | 1.5 | Iris-versicolor |
12 | 63 | 6.0 | 2.2 | 4.0 | 1.0 | Iris-versicolor |
13 | 64 | 6.1 | 2.9 | 4.7 | 1.4 | Iris-versicolor |
14 | 65 | 5.6 | 2.9 | 3.6 | 1.3 | Iris-versicolor |
15 | 66 | 6.7 | 3.1 | 4.4 | 1.4 | Iris-versicolor |
16 | 67 | 5.6 | 3.0 | 4.5 | 1.5 | Iris-versicolor |
17 | 68 | 5.8 | 2.7 | 4.1 | 1.0 | Iris-versicolor |
18 | 69 | 6.2 | 2.2 | 4.5 | 1.5 | Iris-versicolor |
19 | 70 | 5.6 | 2.5 | 3.9 | 1.1 | Iris-versicolor |
20 | 71 | 5.9 | 3.2 | 4.8 | 1.8 | Iris-versicolor |
21 | 72 | 6.1 | 2.8 | 4.0 | 1.3 | Iris-versicolor |
22 | 73 | 6.3 | 2.5 | 4.9 | 1.5 | Iris-versicolor |
23 | 74 | 6.1 | 2.8 | 4.7 | 1.2 | Iris-versicolor |
24 | 75 | 6.4 | 2.9 | 4.3 | 1.3 | Iris-versicolor |
25 | 76 | 6.6 | 3.0 | 4.4 | 1.4 | Iris-versicolor |
26 | 77 | 6.8 | 2.8 | 4.8 | 1.4 | Iris-versicolor |
27 | 79 | 6.0 | 2.9 | 4.5 | 1.5 | Iris-versicolor |
28 | 80 | 5.7 | 2.6 | 3.5 | 1.0 | Iris-versicolor |
29 | 81 | 5.5 | 2.4 | 3.8 | 1.1 | Iris-versicolor |
30 | 82 | 5.5 | 2.4 | 3.7 | 1.0 | Iris-versicolor |
31 | 83 | 5.8 | 2.7 | 3.9 | 1.2 | Iris-versicolor |
32 | 85 | 5.4 | 3.0 | 4.5 | 1.5 | Iris-versicolor |
33 | 86 | 6.0 | 3.4 | 4.5 | 1.6 | Iris-versicolor |
34 | 87 | 6.7 | 3.1 | 4.7 | 1.5 | Iris-versicolor |
35 | 88 | 6.3 | 2.3 | 4.4 | 1.3 | Iris-versicolor |
36 | 89 | 5.6 | 3.0 | 4.1 | 1.3 | Iris-versicolor |
37 | 90 | 5.5 | 2.5 | 4.0 | 1.3 | Iris-versicolor |
38 | 91 | 5.5 | 2.6 | 4.4 | 1.2 | Iris-versicolor |
39 | 92 | 6.1 | 3.0 | 4.6 | 1.4 | Iris-versicolor |
40 | 93 | 5.8 | 2.6 | 4.0 | 1.2 | Iris-versicolor |
41 | 94 | 5.0 | 2.3 | 3.3 | 1.0 | Iris-versicolor |
42 | 95 | 5.6 | 2.7 | 4.2 | 1.3 | Iris-versicolor |
43 | 96 | 5.7 | 3.0 | 4.2 | 1.2 | Iris-versicolor |
44 | 97 | 5.7 | 2.9 | 4.2 | 1.3 | Iris-versicolor |
45 | 98 | 6.2 | 2.9 | 4.3 | 1.3 | Iris-versicolor |
46 | 100 | 5.7 | 2.8 | 4.1 | 1.3 | Iris-versicolor |
47 | 107 | 4.9 | 2.5 | 4.5 | 1.7 | Iris-virginica |
48 | 122 | 5.6 | 2.8 | 4.9 | 2.0 | Iris-virginica |
49 | 124 | 6.3 | 2.7 | 4.9 | 1.8 | Iris-virginica |
50 | 127 | 6.2 | 2.8 | 4.8 | 1.8 | Iris-virginica |
51 | 128 | 6.1 | 3.0 | 4.9 | 1.8 | Iris-virginica |
52 | 139 | 6.0 | 3.0 | 4.8 | 1.8 | Iris-virginica |
iris_virginica_dataset = iris_data[(iris_data['PetalLengthCm'] > 5)]
iris_virginica_dataset.to_csv('iris_virginica_dataset.csv',index=False)
pd.read_excel('iris_virginica_dataset.xlsx')
Id | SepalLengthCm | SepalWidthCm | PetalLengthCm | PetalWidthCm | Species | |
---|---|---|---|---|---|---|
0 | 84 | 6.0 | 2.7 | 5.1 | 1.6 | Iris-versicolor |
1 | 101 | 6.3 | 3.3 | 6.0 | 2.5 | Iris-virginica |
2 | 102 | 5.8 | 2.7 | 5.1 | 1.9 | Iris-virginica |
3 | 103 | 7.1 | 3.0 | 5.9 | 2.1 | Iris-virginica |
4 | 104 | 6.3 | 2.9 | 5.6 | 1.8 | Iris-virginica |
5 | 105 | 6.5 | 3.0 | 5.8 | 2.2 | Iris-virginica |
6 | 106 | 7.6 | 3.0 | 6.6 | 2.1 | Iris-virginica |
7 | 108 | 7.3 | 2.9 | 6.3 | 1.8 | Iris-virginica |
8 | 109 | 6.7 | 2.5 | 5.8 | 1.8 | Iris-virginica |
9 | 110 | 7.2 | 3.6 | 6.1 | 2.5 | Iris-virginica |
10 | 111 | 6.5 | 3.2 | 5.1 | 2.0 | Iris-virginica |
11 | 112 | 6.4 | 2.7 | 5.3 | 1.9 | Iris-virginica |
12 | 113 | 6.8 | 3.0 | 5.5 | 2.1 | Iris-virginica |
13 | 115 | 5.8 | 2.8 | 5.1 | 2.4 | Iris-virginica |
14 | 116 | 6.4 | 3.2 | 5.3 | 2.3 | Iris-virginica |
15 | 117 | 6.5 | 3.0 | 5.5 | 1.8 | Iris-virginica |
16 | 118 | 7.7 | 3.8 | 6.7 | 2.2 | Iris-virginica |
17 | 119 | 7.7 | 2.6 | 6.9 | 2.3 | Iris-virginica |
18 | 121 | 6.9 | 3.2 | 5.7 | 2.3 | Iris-virginica |
19 | 123 | 7.7 | 2.8 | 6.7 | 2.0 | Iris-virginica |
20 | 125 | 6.7 | 3.3 | 5.7 | 2.1 | Iris-virginica |
21 | 126 | 7.2 | 3.2 | 6.0 | 1.8 | Iris-virginica |
22 | 129 | 6.4 | 2.8 | 5.6 | 2.1 | Iris-virginica |
23 | 130 | 7.2 | 3.0 | 5.8 | 1.6 | Iris-virginica |
24 | 131 | 7.4 | 2.8 | 6.1 | 1.9 | Iris-virginica |
25 | 132 | 7.9 | 3.8 | 6.4 | 2.0 | Iris-virginica |
26 | 133 | 6.4 | 2.8 | 5.6 | 2.2 | Iris-virginica |
27 | 134 | 6.3 | 2.8 | 5.1 | 1.5 | Iris-virginica |
28 | 135 | 6.1 | 2.6 | 5.6 | 1.4 | Iris-virginica |
29 | 136 | 7.7 | 3.0 | 6.1 | 2.3 | Iris-virginica |
30 | 137 | 6.3 | 3.4 | 5.6 | 2.4 | Iris-virginica |
31 | 138 | 6.4 | 3.1 | 5.5 | 1.8 | Iris-virginica |
32 | 140 | 6.9 | 3.1 | 5.4 | 2.1 | Iris-virginica |
33 | 141 | 6.7 | 3.1 | 5.6 | 2.4 | Iris-virginica |
34 | 142 | 6.9 | 3.1 | 5.1 | 2.3 | Iris-virginica |
35 | 143 | 5.8 | 2.7 | 5.1 | 1.9 | Iris-virginica |
36 | 144 | 6.8 | 3.2 | 5.9 | 2.3 | Iris-virginica |
37 | 145 | 6.7 | 3.3 | 5.7 | 2.5 | Iris-virginica |
38 | 146 | 6.7 | 3.0 | 5.2 | 2.3 | Iris-virginica |
39 | 148 | 6.5 | 3.0 | 5.2 | 2.0 | Iris-virginica |
40 | 149 | 6.2 | 3.4 | 5.4 | 2.3 | Iris-virginica |
41 | 150 | 5.9 | 3.0 | 5.1 | 1.8 | Iris-virginica |
model_2 = LogisticRegression()
model_2.fit(x_train,y_train)
LogisticRegression()
y_pred_2 = model_2.predict(x_test)
y_pred_2
array(['Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-virginica', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-setosa', 'Iris-versicolor', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa'], dtype=object)
confusion_matrix(y_test,y_pred_2)
array([[15, 0, 0], [ 0, 13, 1], [ 0, 0, 16]], dtype=int64)
print(classification_report(y_test,y_pred_2))
precision recall f1-score support Iris-setosa 1.00 1.00 1.00 15 Iris-versicolor 1.00 0.93 0.96 14 Iris-virginica 0.94 1.00 0.97 16 accuracy 0.98 45 macro avg 0.98 0.98 0.98 45 weighted avg 0.98 0.98 0.98 45
accuracy_score(y_test,y_pred_2)
0.9777777777777777
color_class = {
'Iris-setosa' : 'red',
'Iris-versicolor' : 'green',
'Iris-virginica' : 'blue'
}
colors = [color_class[label] for label in y_pred_2]
plt.scatter(x_test.SepalLengthCm, x_test.PetalLengthCm, c=colors)
plt.xlabel('Sepal Length')
plt.ylabel('Petal Length')
plt.title('Predicted Species using Linear Regression Model')
legend_entries = [
plt.Line2D([0], [0], marker='o', color='w', markerfacecolor=color, markersize=10, label=label)
for label, color in color_class.items()
]
plt.legend(handles=legend_entries, title='Species')
plt.show()
model_3 = LinearSVC()
model_3.fit(x_train, y_train)
LinearSVC()
y_pred_3 = model_3.predict(x_test)
y_pred_3
array(['Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-virginica', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-setosa', 'Iris-versicolor', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa'], dtype=object)
print(confusion_matrix(y_test, y_pred_3))
[[15 0 0] [ 0 13 1] [ 0 1 15]]
print(classification_report(y_test, y_pred_3))
precision recall f1-score support Iris-setosa 1.00 1.00 1.00 15 Iris-versicolor 0.93 0.93 0.93 14 Iris-virginica 0.94 0.94 0.94 16 accuracy 0.96 45 macro avg 0.96 0.96 0.96 45 weighted avg 0.96 0.96 0.96 45
print(accuracy_score(y_test,y_pred_3))
0.9555555555555556
color_class = {
'Iris-setosa' : 'red',
'Iris-versicolor' : 'green',
'Iris-virginica' : 'blue'
}
colors = [color_class[label] for label in y_pred_3]
plt.scatter(x_test.SepalLengthCm, x_test.PetalLengthCm, c=colors)
plt.xlabel('Sepal Length')
plt.ylabel('Petal Length')
plt.title('Predicted Species using Linear Sub-Vector Machine Model')
legend_entries = [
plt.Line2D([0], [0], marker='o', color='w', markerfacecolor=color, markersize=10, label=label)
for label, color in color_class.items()
]
plt.legend(handles=legend_entries, title='Species')
plt.show()
classifier = RandomForestClassifier(n_estimators=100)
classifier.fit(x_train, y_train)
RandomForestClassifier()
y_pred_4 = classifier.predict(x_test)
y_pred_4
array(['Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa', 'Iris-setosa', 'Iris-virginica', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa', 'Iris-versicolor', 'Iris-versicolor', 'Iris-virginica', 'Iris-setosa', 'Iris-virginica', 'Iris-setosa', 'Iris-versicolor', 'Iris-setosa', 'Iris-versicolor', 'Iris-setosa', 'Iris-versicolor', 'Iris-virginica', 'Iris-virginica', 'Iris-versicolor', 'Iris-setosa', 'Iris-setosa'], dtype=object)
accuracy = classifier.score(x_test, y_test)
print(f"Accuracy: {accuracy}")
Accuracy: 0.9777777777777777
print(confusion_matrix(y_test, y_pred_4))
[[15 0 0] [ 0 13 1] [ 0 0 16]]
print(classification_report(y_test, y_pred_4))
precision recall f1-score support Iris-setosa 1.00 1.00 1.00 15 Iris-versicolor 1.00 0.93 0.96 14 Iris-virginica 0.94 1.00 0.97 16 accuracy 0.98 45 macro avg 0.98 0.98 0.98 45 weighted avg 0.98 0.98 0.98 45
print(accuracy_score(y_test,y_pred_4))
0.9777777777777777
color_class = {
'Iris-setosa' : 'red',
'Iris-versicolor' : 'green',
'Iris-virginica' : 'blue'
}
colors = [color_class[label] for label in y_pred_4]
plt.scatter(x_test.SepalLengthCm, x_test.PetalLengthCm, c=colors)
plt.xlabel('Sepal Length')
plt.ylabel('Petal Length')
plt.title('Predicted Species using Random Forest Classifier')
legend_entries = [
plt.Line2D([0], [0], marker='o', color='y', markerfacecolor=color, markersize=10, label=label)
for label, color in color_class.items()
]
plt.legend(handles=legend_entries, title='Species')
plt.show()
1. For Flowers have Petal Length < 2.45 cm, belong to Setosa Species
¶2. For Flowers having Petal Length > 3cm and Petal Length < 5cm, most of them belong Versicolor Species
¶3. For Flowers having Petal Length > 5cm, belong to Virginca Species