Text Share Online

Machine Learning Lab Experiments

Experiment 1: FIND-S Algorithm

import pandas as pd; data = pd.read_csv(‘sample data.csv’); features = data.iloc[:, :-1].values; target = data.iloc[:, -1].values; find_s_algorithm = lambda f,t: (lambda h: ([h.__setitem__(j,’?’) for i,v in enumerate(t) if v==’Yes’ for j in range(len(h)) if h[j]!=f[i][j]], h)[1])((next(f[i].copy() for i,v in enumerate(t) if v==’Yes’))); hypothesis = find_s_algorithm(features, target); print(“Final Hypothesis:”, hypothesis)

Experiment 2: Candidate Elimination Algorithm

import numpy as np; import pandas as pd; data=pd.read_csv(‘enjoysport.csv’); concepts=np.array(data.iloc[:,:-1]); target=np.array(data.iloc[:,-1]); print(“Concepts:”); print(concepts); print(“Target:”); print(target); learn=lambda c,t:(lambda s,g:( [([(s.__setitem__(x,’?’),g[x].__setitem__(x,’?’)) if h[x]!=s[x] else None for x in range(len(s))] if t[i]==’yes’ else [(g[x].__setitem__(x,s[x]) if h[x]!=s[x] else g[x].__setitem__(x,’?’)) for x in range(len(s))] ) for i,h in enumerate(c)], (s,[row for row in g if row!=[‘?’]*len(s)]) )[1])(c[0].copy(),[[‘?’ for _ in range(len(c[0]))] for _ in range(len(c[0]))]); s_final,g_final=learn(concepts,target); print(“
Final Specific_h:”,s_final); print(“Final General_h:”,g_final)

Experiment 3: ID3 Algorithm

import csv; import math; def load_csv(filename): data=list(csv.reader(open(filename))); return data[1:],data[0]; def entropy(labels): total=len(labels); counts={}; [counts.__setitem__(label,counts.get(label,0)+1) for label in labels]; ent=0; [ent:=ent-(count/total)*math.log2(count/total) for count in counts.values()]; return ent; def info_gain(data,attr_index): total_entropy=entropy([row[-1] for row in data]); values={}; [values.setdefault(row[attr_index],[]).append(row) for row in data]; weighted_entropy=0; [weighted_entropy:=weighted_entropy+(len(subset)/len(data))*entropy([row[-1] for row in subset]) for subset in values.values()]; return total_entropy-weighted_entropy; def best_attribute(data): gains=[]; [gains.append(info_gain(data,i)) for i in range(len(data[0])-1)]; return gains.index(max(gains)); def id3(data,headers): labels=[row[-1] for row in data]; return labels[0] if labels.count(labels[0])==len(labels) else (max(set(labels),key=labels.count) if len(data[0])==1 else (lambda best:{headers[best]:{value:id3([row[:best]+row[best+1:] for row in data if row[best]==value],headers[:best]+headers[best+1:]) for value in set(row[best] for row in data)}})(best_attribute(data))); data,headers=load_csv(“id31.csv”); tree=id3(data,headers); print(tree)

Experiment 4: ANN using Backpropagation

import numpy as np; X=np.array([[2,9],[1,5],[3,6]],float); y=np.array([[92],[86],[89]],float); X=X/np.amax(X,axis=0); y=y/100; sig=lambda x:1/(1+np.exp(-x)); dsig=lambda x:x*(1-x); epoch=5000; lr=0.1; inp=2; hid=3; out=1; wh=np.random.uniform(size=(inp,hid)); bh=np.random.uniform(size=(1,hid)); wout=np.random.uniform(size=(hid,out)); bout=np.random.uniform(size=(1,out));
for i in range(epoch): h=sig(np.dot(X,wh)+bh); o=sig(np.dot(h,wout)+bout); e=y-o; do=e*dsig(o); eh=do.dot(wout.T); dh=eh*dsig(h); wout+=h.T.dot(do)*lr; wh+=X.T.dot(dh)*lr; bout+=np.sum(do,0,keepdims=True)*lr; bh+=np.sum(dh,0,keepdims=True)*lr;
print(“Input:
“,X); print(“Actual Output:
“,y); print(“Predicted Output:
“,o)

Experiment 5: Naive Bayes

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn import metrics
df = pd.read_csv(“pima_indian.csv”)
feature_col_names = [‘num_preg’,’glucose_conc’,’diastolic_bp’,’thickness’,’insulin’,’bmi’,’diab_pred’,’age’]
predicted_class_names = [‘diabetes’]
X = df[feature_col_names].values
y = df[predicted_class_names].values
print(“Total number of samples in the dataset:”, X.shape[0])
xtrain, xtest, ytrain, ytest = train_test_split(X, y, test_size=0.30)
print(“Number of training samples:”, xtrain.shape[0])
print(“Number of testing samples:”, xtest.shape[0])
clf = GaussianNB().fit(xtrain, ytrain.ravel())
predicted = clf.predict(xtest)
print(“
 Confusion matrix”)
print(metrics.confusion_matrix(ytest, predicted))
print(‘
 Accuracy of the classifier is’, metrics.accuracy_score(ytest, predicted))
print(‘
 Precision of the classifier is’, metrics.precision_score(ytest, predicted))
print(‘
 Recall of the classifier is’, metrics.recall_score(ytest, predicted))

Experiment 6: Text Naive Bayes

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics
msg = pd.read_csv(‘naivetext.csv’, names=[‘message’,’label’])
print(‘The dimensions of the dataset’, msg.shape)
msg[‘labelnum’] = msg.label.map({‘pos’:1,’neg’:0})
X = msg.message
y = msg.labelnum
print(X)
print(y)
xtrain, xtest, ytrain, ytest = train_test_split(X, y)
print(‘
 The total number of Training Data :’, ytrain.shape)
print(‘
 The total number of Test Data :’, ytest.shape)
count_vect = CountVectorizer()
xtrain_dtm = count_vect.fit_transform(xtrain)
xtest_dtm = count_vect.transform(xtest)
print(‘
 The words or Tokens in the text documents
‘)
print(count_vect.get_feature_names_out())
df = pd.DataFrame(xtrain_dtm.toarray(), columns=count_vect.get_feature_names_out())
clf = MultinomialNB().fit(xtrain_dtm, ytrain)
predicted = clf.predict(xtest_dtm)
print(‘
 Accuracy of the classifier is’, metrics.accuracy_score(ytest, predicted))
print(‘
 Confusion matrix’)
print(metrics.confusion_matrix(ytest, predicted))
print(‘
 The value of Precision’, metrics.precision_score(ytest, predicted))
print(‘
 The value of Recall’, metrics.recall_score(ytest, predicted))

Experiment 7: Bayesian Network

import pandas as pd; from pgmpy.models import BayesianModel; from pgmpy.estimators import MaximumLikelihoodEstimator, BayesianEstimator; from pgmpy.inference import VariableElimination; data=pd.DataFrame({‘age’:[63,67,67,58,6,56,62,57,63,53],’cholesterol’:[233,254,2289,0,204,236,294,263,392,203],’smoking’:[‘yes’,’yes’,’no’,’yes’,’no’,’no’,’yes’,’no’,’no’,’yes’],’heart_disease’:[‘yes’,’yes’,’yes’,’no’,’no’,’yes’,’no’,’yes’,’yes’,’no’]}); model=BayesianModel([(‘age’,’heart_disease’),(‘cholesterol’,’heart_disease’),(‘smoking’,’heart_disease’)]); model.fit(data,estimator=BayesianEstimator); inference=VariableElimination(model); def diagnose_heart_disease(age,cholesterol,smoking): query_result=inference.query(variables=[‘heart_disease’],evidence={‘age’:age,’cholesterol’:cholesterol,’smoking’:smoking}); prob_yes=query_result[‘heart_disease’].values[1]; return f”Based on the Bayesian Network, the probability of heart disease is {‘high’ if prob_yes>0.5 else ‘low’}: {prob_yes:.2f}. Likely Diagnosis: {‘Positive’ if prob_yes>0.5 else ‘Negative’}”; age=65; cholesterol=270; smoking=’yes’; diagnosis=diagnose_heart_disease(age,cholesterol,smoking); print(f”
Patient Diagnosis: {diagnosis}”); age=50; cholesterol=190; smoking=’no’; diagnosis=diagnose_heart_disease(age,cholesterol,smoking); print(f”
Patient Diagnosis: {diagnosis}”)

Experiment 8: EM vs KMeans

import pandas as pd; import numpy as np; import matplotlib.pyplot as plt; from sklearn.cluster import KMeans; from sklearn.mixture import GaussianMixture; import sklearn.metrics as metrics; names=[‘Sepal_Length’,’Sepal_Width’,’Petal_Length’,’Petal_Width’,’Class’]; dataset=pd.read_csv(“8-dataset.csv”); X=dataset.iloc[:,:-1]; label={‘Iris-setosa’:0,’Iris-versicolor’:1,’Iris-virginica’:2}; y=[label[c] for c in dataset.iloc[:,-1]]; plt.figure(figsize=(14,7)); colormap=np.array([‘red’,’lime’,’black’]); plt.subplot(1,3,1); plt.title(‘Real’); plt.scatter(X.Petal_Length,X.Petal_Width,c=colormap[y]); model=KMeans(n_clusters=3,random_state=0).fit(X); plt.subplot(1,3,2); plt.title(‘KMeans’); plt.scatter(X.Petal_Length,X.Petal_Width,c=colormap[model.labels_]); print(‘The accuracy score of K-Mean:’,metrics.accuracy_score(y,model.labels_)); print(‘The Confusion matrix of K-Mean:
‘,metrics.confusion_matrix(y,model.labels_)); gmm=GaussianMixture(n_components=3,random_state=0).fit(X); y_cluster_gmm=gmm.predict(X); plt.subplot(1,3,3); plt.title(‘GMM Classification’); plt.scatter(X.Petal_Length,X.Petal_Width,c=colormap[y_cluster_gmm]); print(‘The accuracy score of EM:’,metrics.accuracy_score(y,y_cluster_gmm)); print(‘The Confusion matrix of EM:
‘,metrics.confusion_matrix(y,y_cluster_gmm)); plt.show()

Experiment 9: KNN

from sklearn.model_selection import train_test_split; from sklearn.neighbors import KNeighborsClassifier; from sklearn.metrics import classification_report, confusion_matrix; from sklearn import datasets; iris=datasets.load_iris(); x=iris.data; y=iris.target; print(‘sepal-length’,’sepal-width’,’petal-length’,’petal-width’); print(x); print(‘class: 0-Iris-Setosa, 1-Iris-Versicolour, 2Iris-Virginica’);print(y);x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3); classifier=KNeighborsClassifier(n_neighbors=5); classifier.fit(x_train,y_train); y_pred=classifier.predict(x_test); print(‘Confusion Matrix’); print(confusion_matrix(y_test,y_pred)); print(‘Accuracy Metrics’);print(classification_report(y_test,y_pred))

Experiment 10: Locally Weighted Regression

import numpy as np; from bokeh.plotting import figure, show, output_notebook; from bokeh.layouts import gridplot; from bokeh.io import push_notebook; output_notebook(); def radial_kernel(x0, X, tau): return np.exp(np.sum((X – x0) ** 2, axis=1) / (-2 * tau * tau)); def local_regression(x0, X, Y, tau): x0 = np.r_[1, x0]; X = np.c_[np.ones(len(X)), X]; weights = radial_kernel(x0, X, tau); xw = X.T * weights; beta = np.linalg.pinv(xw @ X) @ xw @ Y; return x0 @ beta; n = 1000; X = np.linspace(-3, 3, num=n); print(“The Data Set (10 Samples) X:
“, X[1:10]); Y = np.log(np.abs(X ** 2 – 1) + 0.5); print(“The Fitting Curve Data Set (10 Samples) Y:
“, Y[1:10]); X += np.random.normal(scale=0.1, size=n); print(“Normalized (10 Samples) X:
“, X[1:10]); domain = np.linspace(-3, 3, num=300); print(“X0 Domain Space (10 Samples):
“, domain[1:10]); def plot_lwr(tau): prediction = [local_regression(x0, X, Y, tau) for x0 in domain]; plot = figure(width=400, height=400); plot.title.text = f’tau={tau}’; plot.scatter(X, Y, alpha=0.3); plot.line(domain, prediction, line_width=2, color=’red’); return plot; show(gridplot([[plot_lwr(10.0), plot_lwr(1.0)], [plot_lwr(0.1), plot_lwr(0.01)]]))

    Share This: