Machine Learning Notes
Machine Learning Notes
Machine Learning Notes
2020
It is the process to teach machine to recognize the images or pictures or some kind of data.
Combination of data
Categories
Machine learning
Supervised- we have input as well as to correct it we have output
input
output
The difference between predicted and actual output is called error margin
Two type of algorithms (to handle/complete the big main process divide it into small process)
Algorithms:
1. Clustering(grouping)
Example
o K mean clustering
2. Anamoly
To understand the pattern
Algorithms:
1. Monte Carlo
2. Q learning
Pi cham
Jupiter note book
Idle
Python 3.7.4
After that create new folder and open cmd from that path
Num pi
Import numpy/pandas/matplotlib
Commands in cmd
Numpy
It is a library which is used in python. Used for mathematical and scientific calculations
In jupyter notebook
Import numpy as np
Print(dir(np))
Print(help(np))
In google
Array is different from matrix. As the operations performed on them are different.
# 1D array
A_1 = np.array([1,2,3,4,5])--------the ‘()’are used for array method in numpy and ‘[]’ are used to
define an array items
print(A_1)
ouput
A_2 = np.array([
[1,2,3],---->1st Row
[7,8,9]----->3rd row
])
print(A_2)
Output
[[1 2 3]
[4 5 6]
[7 8 9]]
# 3D array shape 3x3x3---->3-rows, 3-cols, 3-elements
A_3=np.array([
[[1,2,3],[4,5,6],[7,8,9]],
[[10,11,12],[13,14,15],[16,17,18]],
[[19,20,21],[22,23,24],[25,26,27]],
])
Output:
[[[1 2 3]
[4 5 6]
[7 8 9]]
[[10 11 12]
[13 14 15]
[16 17 18]]
[[19 20 21]
[22 23 24]
[25 26 27]]]
Range function
Have three parameters (start, stop, increment/ decrement)
Gives integer type of data
size = range(10)
print(size)
type(size)
for i in size:
print(i)
print(type(i))
P1=staring position
P2=ending position
P3=increment/decrement
arr = np.arange(1,10)
print(arr)
print(type(arr))
output :[1 2 3 4 5 6 7 8 9]
<class 'numpy.ndarray'>
ar_1=np.arange(10,51,2)
print(ar_1)
output: [10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50]
zeros=np.zeros((4,3))
zeros
array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])
zeros_1=np.zeros((3,4),dtype=np.int16)
zeros_1
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=int16)
--------------print(arr_1.ndim)
--------------print(arr_1.size)
-------------print(arr_1.itemsize)
---------------print(arr_1.dtype)
---------------print(arr_1.shape) output=(8,)
print(temp_arr)
temp_arr.ndim
import time
import sys
s=range(1000)
print(sys.getsizeof(5)*len(s))
14000
d=np.arange(1000)
print(d.size*d.itemsize)
4000
Date: 04.09.2020
import time
size = 10000
#list
l1=range(size)
l2=range(size)
start=time.time()
print(start)
print((time.time()-start)*1000)
#array
a1=np.arange(size)
a2=np.arange(size)
start=time.time()
result=a1+a2
print((time.time()-start)*1000)
What is line?
Linspace function
Linspace is used to get point in between two points of line
Syntax: linspace(a,b,c)
a-starting point
b- Ending point
array_name.min()
array_name.max()
array_name.sum()
arr_1=
8 9
10 11
12 13
Rows are indicated as axis-1
arr_1=np.array([
[8,9],
[10,11],
[12,13]
])
arr_1.shape
print(arr_1.sum())
Syntax: numpy.sqrt(array_name)
Example: arr_1=np.array([
[8,9],
[10,11],
[12,13]])
print(np.sqrt(arr_1))
output:
[[2.82842712 3. ]
[3.16227766 3.31662479]
[3.46410162 3.60555128]]
arr_2=np.array([[1,2,3],[3,4,5]])
print("addition \n",arr_1+arr_2)
print("subtraction \n",arr_1-arr_2)
print("multiplication \n",arr_1*arr_2)
print("division\n",arr_1/arr_2)
output
addition
[[ 2 4 6]
[ 6 8 10]]
subtraction
[[0 0 0]
[0 0 0]]
multiplication
[[ 1 4 9]
[ 9 16 25]]
division
[[1. 1. 1.]
[1. 1. 1.]]
Matrix
#convert array to matrix
m_1=np.matrix(a)
print(type(m_1))
PANDAS
Python has 4 type of number system
Decimal
Hexadecimal
Octadecimal
Binary
Dictionary
Key is ont of two data type either numeric(int) or string
Program
#creation of dataframe
import pandas as pd
weather_data={
"Day":['1/1/2020','22/1/2020','3/2/2020','12/4/2020','25/5/2020'],
"Temp":[31,29,22,35,19],
"Wind_speed":[7,9,4,5,6],
"Event":["sunny","sunny","rain","fog","sunny"]
print(weather_data)
df=pd.DataFrame(weather_data)
df
Date: 05.09.2020
Shape: used to give dimensions of the table that is the number of rows and columns
ROW
Head
Syntax: dataframe_name.head(no of rows)
Bydefault: 5
Tail
Syntax: dataframe_name.tail(no of rows)
Bydefault: 5
Slicing:
It is used to create a sublist
Syntax:
Indexing/slicing in dataframe:
Dataframe_name[starting_index:ending index]
COLUMN
Dataframe_name.columns
--->dataframe_name[column_name]
Day=df[‘Day’].values
Print(Day)
Df[[‘day’,temp’]].values
METHODS
Temp_col=df[“Temp”].values
Temp_col.max()
Program
Df[Df[“Temp”]>32]-->queries
Df[df[“temp”]==df[“temp”].max()]
Df.describe()------>used to get operational/ int fomate data, gives mean, standered deviation and cout
and many more things.
Weather_data=[ (‘12/2/2020’,32,8,”rain”),
(‘29/3/2020’,22,8,”rain”),
(‘28/5/2020’,19,8,”rain”),
(‘22/7/2020’,23,8,”rain”),]
Df=pd.DataFrame(data=weather_data,columns=[“day”,”temp”,”wind_speed”,”events”])
Date: 07.09.2020
CSV file
Read_csv()
It is a me
#csv data
Pd.read_csv(r”path”)
#XLS
Df=pd.read_excel(r”path”)
Df.index
------
Df.loc[“index_name”]
df= pd.read_csv(r"C:\Users\K\Documents\stock_csv_data.csv",skiprows=No_of_rows)
Header
Makes the mentioned row a header
Index wise
Of we put 2 then it skips the ist row and makes the 2nd row header
Example:
df
Write csv
To_csv()=to create a new writern csv dataframe file
Example: df1.to_csv("newfile.csv",index=False)
Write excel:
df_1.to_excel("exelfile.xlsx",sheet_name="stock",index=False,startrow=2,startcol=1,header=False)
import pandas as pd
df_stock=pd.DataFrame({
"tikers":["Google","WMT","MSFT"],
"price":[30,40,10],
"pe":[20.5,65.10,35.2],
"eps":[20.5,20.5,56.1]
})
df_stock
df_weather=pd.DataFrame({
"day":["monday","tuesday","friday"],
"temp":[30,40,10],
"event":["rain","sunny","rain"],
"humidity":[20.5,20.5,56.1]
})
df_weather
df_stock.to_excel(writer ,sheet_name="stock_file")
df_weather.to_excel(writer ,sheet_name="weather_file")
Attribute can be any thing you wanna replace the missing value with
“temperature” : 0,
“windspeed” : 0,
parse_dates=['day']
used to change the day/date str values into date format/ time stamp
example: df=pd.read_csv("weather_data.csv",parse_dates=['day'])
Fillna(value)
Fills all the NAN values of the table with the value passed
method of fillna
Ffill(forward fill)
It is used to fill the current value with the previous value/above cell value
It is used to fill the current value with the next value/below cell value
Interpolate
Dropna
Thresh
Like if (thresh=1)----then if then it will keep all the rows which has 1 NAN in it
index=pd.DatetimeIndex(rg)
df.reindex(index)
df2=df.replace({
"temperature":'[a-z]',
"windspeed":'[a-z]'
},'',regex=True)
df2
Grouping / clustering
If we have a data which has a column having repitative values of different type
Date: 10.09.2020
Concatenation:
Used for basic concatenation
df=pd.concat([india_weather,us_weather],keys=["india","us"])
df
df=pd.concat([india_weather,us_weather])
df
df=pd.concat([india_weather,us_weather],ignore_index=True)
df
Merge
Merge is use to merge to data frames
Syntax: pandas.merge(dataframe1,dataframe2,on=”columnname”,
how=”inner/outer”,indicator=”true/false(bydefault”)
“on”---it merges the dataframes on the basis o fthe column name mentioned.
Ex: df3=pd.merge(df1,df2,on="city",how="outer",indicator=True)
baltimor
3 40.0 68.0 NaN NaN left_only
e
MATPLOT LIB
import matplotlib.pyplot as plt
To plot-----plt.plot(x,y)
plt.title("Weather Graph")
plt.xlabel("Days")
plt.ylabel("Temp")
plt.plot(x,y,color="blue", linewidth=2,linestyle="dotted",marker="*")
attributes of plot
color
linewidth
linesyle
alpha----controles opacity
plt.show()
String format
Refer: https://matplotlib.org/3.2.1/api/_as_gen/matplotlib.pyplot.plot.html
Date: 11.09.2020
Program:
plt.title("weather")
plt.xlabel("day")
plt.ylabel("temp")
plt.plot(day,mumbai,"g*-")
plt.plot(day,delhi,"ro-")
plt.plot(day,pune,"b^-")
plt.legend(loc="upper right")-------used to place the graph scale(bydefault value is best is it will fit
itself at the emply space )
attributes of legend:
plt.grid()
Bar Chart:
company=["Relince","Indian Oil","State Bank Of India","TATA"]
revenue=[82,77,47,65]
plt.bar(company,revenue,color="red")
company_position=np.arange(len(company))
plt.bar(company_position,revenue,color="green")
plt.xticks(company_position,company)
plt.show()
plt.bar(company_position-0.2,revenue,width=0.4,label="revenue")
plt.bar(company_position+0.2,profit,width=0.4,label="profit")
plt.legend(fontsize="large")
plt.xticks(company_position,company)
plt.show()
#multiple bar horizontal
plt.barh(company_position-0.2,revenue,label="revenue")
plt.barh(company_position+0.2,profit,label="profit")
plt.legend(fontsize="large")
plt.yticks(company_position,company)
plt.show()
Histogram
It can be generated using also with one parameter
people_ages=[12,45,18,8,3,85,75,65,15,95,35,23,44,66,58,62,73,84,92,110]
age_group=[1,10,20,30,40,50,60,70,80,90,100,110]
plt.hist(people_ages,age_group,rwidth=0.8)
plt.yticks(range(0,7))
plt.show()
Pi Chart
exp=[1400,600,300,410,250]
exp_label=["bike","food","phone","internet","others"]
plt.pie(exp,labels=exp_label,shadow=True,autopct=”%1.5f%%”,explode=[0,0,0,0.4,0)
plt.show()
#plt.axis("equal") ---when you get ovel shaped pi chart used to make is circular
plt.savefig("pie.png")
#never write plt.show() before savefig it will not give the graph
Date: 14.09.2020
ALGORITHMS
Simple linear Regression
----algorithm implementation in ml is called model
x Y
Y_e Sal
1 20
2 40
3 50
4 40
5 50
50
40
30
20
10
1 2 3 4 5
B1---->slop of coefficient
b0=y_mean-b1*x_mean b1=sum(x-x_mean)*sum(y-y_mean)/sum(x-x_mean)^2
c---->constant
m---->slope
y---->dependent x---->independent
Required things to find best fit line
(x- (x-x’)
X Y x-x’ Y-y’
x’)^2 *(y-y’)
1 20 -2 -20 4 40
2 40 -1 0 1 0
3 50 0 10 0 0
4 40 1 0 1 0
5 50 2 10 4 20
Xmean= Ymean=
0 0 10 60
3 40
m= (x-x’)*(y-y’)/(x-x’)^2=6
to find constant
y=c+m*x
40=c+18
c=2
code jupyter
from sklearn.linear_model import LinearRegression
Date: 15.09.2020
Y=b0+b1*x
b0 =sum(y)*sum(x**2)-sum(x)*sum(xy)/n*sum(x**2)-(sum(x))**2=22
b1=n*sum(xy)-sum(x)*sum(y)/ n*sum(x**2)-(sum(x))**2=6
X y xy x**2
1 20 20 1
2 40 80 4
3 50 150 9
4 40 160 16
5 50 250 25
15 200 660 55
date: 16.09.2020(absent)
X1 X2 Y
21 31 44
22 36 45
23 32 46
24 35 47
28 34 48
27 38 49
24.16 34.33 46.5
Y= b0 + b1x
Multiple linear:
x1_mean = 24.16
x2_mean = 34.33
y_mean = 46.5
b1 = 24.5 / 38.8336
b1 = 0.63089
b2 = 16 / 33.3334
b2 = 0.48
b0 = 14.7
y_pred = 45.93
Date: 18.09.2020
simple Multiple
Single input x,y Multiple input x1,x2,x3,y
x y X1 X2 X3 y
Reshape(-1,1) to fit in the columns Reshape(1,-1) to fit row wise
Get dummies
Date. 21.09.2020
Actual value and predicted value has large difference which mean testing is also not accurate
Type of data
In this model the training model is 99% accurate but the testing data is not that accurate
Under fitting problem is very low and over fitting problem is very high.
Generalized model
It almost cover all the points and give as must as low error as possible
R squared method
R2=1-RSS/TSS
Recedual = y-y_pred
T=y-y_mean
Rss=(sum(y-y_pred))^2
Tss=(sum(y-y_mean))^2
Polynomial regression
One input one output
Y=b0+b1x
Polynomial regression
Y=b0+b1x+b2x^2+b2x^3
It is used where we have to predict values continuously there regression algorithm is used it predicts
continuous numbers
Generalize form
n Sum(x) Sum(x^2) B0
Sum(x) Sum(x^2) Sum(x^3) B1
Sum(x^2) Sum(x^3) Sum(x^4) B1
=
Sum(y)
Sum(yx)
Sum(yx^2)
Date: 22.09.2020
Date: 23.09.2020
Classification:- categorising the data , it means it predicts output from multiple classes
Categorical data
Cat
Dog
Dog
Cat
Cat
Cat
Dog
Dog
Logistic Regression:
(It is a classification algorithm), it is similar to linear regression.
Sygmoid curve
It works on probability
Formula of sigmoid curve:simple linear
y=eb0+b1x/1+eb0+b1
Or
y=1/1+e-(bo+b1x)
multiple linear
y=eb0+b1x1+b2x2+…...+bnxn/1+ eb0+b1x1+b2x2…..+bnxn
or
y=1/1+e-(b0+b1x1+b2x2+…...+bnxn)
Example:
y- (x-
x- (x-
x y y_mea x_mean)*(
x_mean x_mean)**2
n y-y_mean)
21 1 -1.5 0.5 2.25 -0.75
22 0 -0.5 -0.5 0.25 0.25
23 0 0.5 -0.5 0.25 -0.25
24 1 1.5 0.5 2.25 0.75
22.5 0.5 0 0 5 0
B1=0
B0=0.5
y=0.5
y=eb0+b1x/1+eb0+b1
y=1/1+e-(bo+b1x)
y=0.622459
Code of logistic regression with sklearn for single variable i.e single input
import pandas as pd
import numpy as np
%matplotlib inline
Df=pd.read_csv(“insurance_data.csv”)
Df.isnull().sum()
X=df[“age”].values
y=df[“bought_insuarance”].values
plt.scatter(X,y)
x_train, x_test,y_train,y_test=train_test.split(X,y,test_size=0.2,random_state=0)
#creating a model
log_model=LogisticRegression()
x_train.x_train.reshape(-1,1)
y_train=y_train.reshape(-1,1)
x_test.x_test.reshape(-1,1)
y_test=y_test.reshape(-1,1)
log_model.fit(x_train,y_train)
y_pred=log_model.predict(x_test)
log_model.score(x_test,y_test)*100
#prediction for external value
test=np.array([[25]])
log_model.predict(test)
plt.scatter(X,y)
y_pred=log_model.predict(X)
plt.plot(X,y_pred)
Date:24.09.2020
Confusion matrix:
Pred0 pred 1
Prednot pred survive
Date: 25.09.2020
K Nearest Neighbour
We count the distance of the all points from the new data point entered.
root((x1-x2)^2+(y1-y2)^2)
male=0,female=1
Math.sqrt ((x1-x2)**2+(y1-y2)**2)
Date: 28.09.2020
Date. 30.09.2020
Support vectors are the data points which are near to hyper plane
In the below example we choose the margin 2 because it has more distance or width
There are two types of SVM
1. Linear(by default)
2. Polynomial
3. RBF-Radial basis function(best for vector)(non-linear)
4. Sigmoid
(1,1)(2,1)(1,-1)(2,-1)(4,0)(5,1)(5,-1)(6,0)
1 1
2 1
1 -1
2 -1
4 0
5 1
5 -1
6 0
α1 s1 s1 + α2 s1 s2 + α3 s1 s3=-1----s1 is constant
α1 s1 s2 + α2 s2 s2 + α3 s2 s3=-1----s2 is constant
α1 s1 s3 + α2 s2 s3 + α3 s3 s3=1----s3 is constant
for vector s1
α1 s1 s1 + α2 s1 s2 + α3 s1 s3
6 α1+4 α2+9 α3
Similarly
For s2
4 α1+6 α2+9 α3
For s3
9 α1+9 α2+17 α3
Ɯ=∑αisi
Ɯ=α1*s1+α2*s2+α3+s3=2
Ɯ= 1 0 -3(matrix)
Equation of a plane
y=b0+b1x
b0=3---offset/bias
b1=1 0
Date: 01.10.2020
Disadvantage of SVM
SVM cannot handle very large scale data
Convert in dataframe
Date: 02.10.2020
Decision tree
Helps to take decision like whether is yes or no, profit or loss.
IG(information gain)
if from both even if one of the value is 0 then its IG is zero and if both values are same then its IG is
1
Formula:
P=5
N=5
IG=1
1. Age:
Information gain (IG) for each old, mid, new
age down Up
Old 3 0
Mid 2 2
new 0 3
For old
IG= (-3/3+0) log2 (3/3+0)-(0/3+0)log2(0/3+0)
IG=0
Similarly
For mid IG=1
For new IG=0
Find the Entropy ---summation of IG’s
E(A)=∑(Pi+Ni/P+N)IG(PiNi)
E(A)=(3+0/10)*0+(4/10)1+(0+3/10)*0
Gain
Gain=IG(target)-E(A)=1-0.4
Gain=0.6
2. Competition
Information gain (IG) for yes and no
Comp Down N Up P
Yes 3 1
No 2 4
For yes
IG= (-P/P+N) log2 (P/P+N)-(N/P+N) log2 (N/P+N)
IG (yes)=0.81127
IG (no)=0.91829
E(C) = (1+3/10)*0.81127+(4+4/10)0.91829)
E=0.87548
Gain=1-0.87548=0.12452
3. Type
Type Up down
Software 3 3
Hardware 2 2
IG(s)=1
IG(h)=1.
E(T)= (6/10)*1+(4/10)1
Gain=0
Date: 06.10.2020
prediction
D
A
T
A SVM
S
E
T
Original dataset
SR A B C Target
1 Y
2 N
3 Y
4 Y
5 N
Bootstrap dataset:duplicasy is allowed
Sr A B C Target
2 N
1 Y
1 Y
3 Y
4 Y
Date: 07.10.2020
Absent
Date:08.10.2020
Mathematical approach
Sample of fruits
p(A|B)=p(B|A)*p(A)/p(B)
total:0.6562
Example 2
Prob(red|yes)=(3/5)(5/10)/(5/10)=0.6
Prob(red|no)=(2/5)(5/10)/(5/10)=0.4
Prob(yellow|yes)=(2/5)(5/10)/(5/10)=0.4
Prob(yellow|no)=(2/5)(5/10)/(5/10)=0.6
Prob(sports|yes)=(4/6)(6/10)/(5/10)
Prob(Sports|no)=(2/6)(6/10)/(5/10)=0.4
Pron(suv|yes)=(1/4)(4/10)/(5/10)=0.2
Date: 13.10.2020
K mean Clustering
Unsupervised machine learning
Amazon
Home
Eletronics
appliances
sports
swim
Amazon cluster
Example 1:
Data={2,3,4,10,11,12,20,25,30 }
K=2
Form 2 clusters
we see the nearest val to the mean or mid val; by calculation for eg take the val 10 then we subtract it
with means 1st 10-4=6 2nd 12-10=2 therefore 10 belongs to c2 always take +ve difference
c1={2,3,4}
c2={10,11,12,20,25,30}
actual m1=2+3+4/3=3
m2=18
c1={2,3,4,10}
c2={11,12,20,25,30}
c1={2,3,4,10,11,12}
c2={20,25,30}
m1= 7 m2=25
c1={2,3,4,10,11,12}
c2={20,25,30}
Euclidean formula
√(XH-H1)**2+(XW-W1)**2)
H->height
Sr Height Weight
no
1 185 72
2 170 56
3 168 60
4 179 68
5 182 72
6 188 77
7 180 71
8 180 70
9 183 84
10 180 88
11 180 67
12 177 76
Form 2 clusters
C2={2,3,}
Row3:168,60
For 1.
√(XH-H1)**2+(XW-W1)**2)
√(168-185)**2+(60-72)**2)=20.8086
For 2
√(168-170)**2+(60-56)**2)=4.47
C2={2,3,}
Mean of r2 =170+168/2=169,58
Row 4: 179,68
For 1.
√(XH-H1)**2+(XW-W1)**2)
√(179-185)**2+(68-72)**2)=7.211
For 2
√(179-169)**2+(68-58)**2)=14.14
C2={2,3,}
Row5:182,72
For 1.
√(182-182)**2+(72-70)**2)=2
For 2
√(182-169)**2+(72-58)**2)=19.798
C2={2,3,}
Row 6:188,77
For 1.
√(188-182)**2+(77-71)**2)=8.485
For 2
√(188-169)**2+(77-58)**2)=26.8700
Row7: 180,71
For 1.
√(180-185)**2+(71-74)**2)=5.830
For 2
√(180-169)**2+(71-58)**2)=17.029
C2={2,3,}
Row8: 180,70
For 1.
√(180-182.5)**2+(70-72.5)**2)=3.5355
For 2
√(180-169)**2+(70-58)**2)=16.2788
C2={2,3,}
Date: 14.10.2020
Date: 15.10.2020
It is a part of computer science, machine learning and artificial intelligence which deal with the
human language.
Tokenization
Types
1. Bigram
2. Trigram
3. Ngram
Application:
NLU ambiguity
1. Lexical ambiguity
Error of word which have two meaning
Ex: she looking for a match
Here match has two meaning like one is games match ore partner match
2. Syntactic ambiguity
A sentence which has two different meaning because of wrong grammar/sentence
misformation
Ex: chicken ready to eat
3. Referential ambiguity
Sentence with wrong reference like
Ex: this is that and that is this
Step3: nltk.download()
Date: 16.10.2020
Tokenization
To take only the imp things with dividing the Para in small token stop words will be removed
Stemming
Words which are similar to each other finds unique ness in the words and then it generates a new
word. Stemming is faster
Lemmatization
It is similar to stemming but it always gives meaningful words. It used more time to generate words
Stopwords-> (I,me,your,of,them,for,on,to,….)
Date: 17.10.2020
Date: 19.10.2020
Bag of Word
Ex.
He is a nice boy 1
Nice girl
Date: 20.10.2020
Neural Network:
Layers:
1. Input layer
2. Output layer
Date: 22.10.2020
Forward propagation:
Activation function
v1=f(u1*wa+u2*wx+b1) O=f(v1*W1+v2*W2+v3*W3+B)
v2=f(u1*wb+ u2*wy+b2) Final activation function O
v3=f(u1*wc+ u2*wz+b3)
When the data turn toward non-linear or the complexity increases at that time activation function is
necessary
Activation function
Code in python
Cost function
Date: 23-10-2020
--------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------
File_extention=”.csv”
--------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------
1. R2/square error
Formula:
SE=sum(y^i-y1)2 y^i is y dash of i
Cost function does not give value in percentage it gives continuous values
Actual data: 2
Predicted value=1.2
Date: 24.10.2020
Name