- 有监督学习
- 无监督学习
如图所示,通过6步完成数据预处理。
import numpy as np
import pandas as pd
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 3].values
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = "NaN", strategy = "mean", axis = 0)
imputer = imputer.fit(X[ : , 1:3])
X[ : , 1:3] = imputer.transform(X[ : , 1:3])
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_X = LabelEncoder()
X[ : , 0] = labelencoder_X.fit_transform(X[ : , 0])
onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)
from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X , Y , test_size = 0.2, random_state = 0)
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
dataset = pd.read_csv('studentscores.csv')
X = dataset.iloc[ : , : 1 ].values
Y = dataset.iloc[ : , 1 ].values
from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 1/4, random_state = 0)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)
Y_pred = regressor.predict(X_test)
plt.scatter(X_train , Y_train, color = 'red')
plt.plot(X_train , regressor.predict(X_train), color ='blue')
plt.show()
plt.scatter(X_test , Y_test, color = 'red')
plt.plot(X_test , regressor.predict(X_test), color ='blue')
plt.show()
import pandas as pd
import numpy as np
dataset = pd.read_csv('50_Startups.csv')
X = dataset.iloc[ : , :-1].values
Y = dataset.iloc[ : , 4 ].values
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder = LabelEncoder()
X[: , 3] = labelencoder.fit_transform(X[ : , 3])
onehotencoder = OneHotEncoder(categorical_features = [3])
X = onehotencoder.fit_transform(X).toarray()
X = X[: , 1:]
from sklearn.cross_validation import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state = 0)
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor.fit(X_train, Y_train)
y_pred = regressor.predict(X_test)
深入研究逻辑回归到底是什么,以及它背后的数学是什么。学习如何计算代价函数,以及如何使用梯度下降法来将代价函数降低到最小。
import numpy as numpy
import matplotlib.pyplot as plt
import pandas as pd
这里获取数据集
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
Y = dataset.iloc[:,4].values
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.25, random_state = 0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
该项工作的库将会是一个线性模型库,之所以被称为线性是因为逻辑回归是一个线性分类器,这意味着我们在二维空间中,我们两类用户(购买和不购买)将被一条直线分割。然后导入逻辑回归类。下一步我们将创建该类的对象,它将作为我们训练集的分类器。
from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
我们预测了测试集。 现在我们将评估逻辑回归模型是否正确的学习和理解。因此这个混淆矩阵将包含我们模型的正确和错误的预测。
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
逻辑回归,Saishruthi Swaminathan的这篇文章
它给出了逻辑回归的详细描述。请务必看一看。
直观了解SVM是什么以及如何使用它来解决分类问题。
了解更多关于SVM如何工作和实现knn算法的知识。
代码练习
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors = 5, metric = 'minkowski', p = 2)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.fit_transform(X_test)
from sklearn.svm import SVC
classifier = SVC(kernel = 'linear', random_state = 0)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('SVM (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('SVM (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
在线性相关数据上实现了SVM。使用Scikit-Learn库。在scikit-learn中我们有SVC分类器,我们用它来完成这个任务。将在下一次实现时使用kernel-trick。
朴素贝叶斯分类器
用条件概率预测标签值
朴素的假设是其特征在统计学上是独立的,事实证明,即使在不完全正确的情况下它也能很好的运作。
优点:
1)可以适用于少量训练数据(比如相当多的特征,问题复杂,却没有足够多的可训练的案例)----条件概率,最大程度利用信息 2)自我进行正则化(概率必须位于0和1之间) 3)高效和高度的可扩展性----用于超大型计算
概率链式法则: p(x1,x2,x3,,,xn,Ck)=p(x1,x2,x3,,,xn|Ck)p(x2,x3,,,xn,Ck)
=p(x1,x2,x3,,,xn|Ck)p(x2,x3,,,xn|Ck)p(x3,,,xn,Ck)
=p(x1,x2,x3,,,xn|Ck)p(x2,x3,,,xn|Ck)p(x3,,,xn|Ck)...p(xn|Ck)
(如果x1,x2,x3,xn相互独立----朴素)
=p(x1|Ck)p(x2|Ck)...p(xn|Ck) = Π i P ( xi | Ck)
p(Ck|x1,x2,x3,,,xn)=(1/z)p(Ck)*Π i P ( xi | Ck)----------1/z是规范化
陷阱一:发生下溢(如果P ( xi | Ck)过小) 解决方案-----取对数
陷阱二:条件概率为0,对数不存在 解决方案:Laplace smoother 拉普拉斯平滑器
学习不同类型的朴素贝叶斯分类器同时开始Bloomberg的课程。课程列表中的第一个是黑河机器学习。它给出了预测函数,特征提取,学习算法,性能评估,交叉验证,样本偏差,非平稳性,过度拟合和超参数调整的整体观点。
使用Scikit-Learn库实现了SVM算法以及内核函数,该函数将我们的数据点映射到更高维度以找到最佳超平面。
在1天内完成第1周和第2周内容以及学习课程中的逻辑回归神经网络。
完成课程1。用Python自己实现一个神经网络。
开始Yaser Abu-Mostafa教授的Caltech机器学习课程-CS156中的课程1。这基本上是对即将到来的课程的一种介绍。他也介绍了感知算法。
完成改进深度神经网络第1周内容:参数调整,正则化和优化。
观看了一些关于如何使用Beautiful Soup进行网络爬虫的教程,以便收集用于构建模型的数据。
完成Yaser Abu-Mostafa教授的Caltech机器学习课程-CS156中的课程2。学习Hoeffding不等式。
Bloomberg ML课程的第3课介绍了一些核心概念,如输入空间,动作空间,结果空间,预测函数,损失函数和假设空间。
发现YouTube一个神奇的频道3Blue1Brown,它有一个播放列表《线性代数的本质》。看完了4个视频,包括了向量,线性组合,跨度,基向量,线性变换和矩阵乘法。
播放列表在这里。
继续观看了4个视频,内容包括三维变换、行列式、逆矩阵、列空间、零空间和非方矩阵。
播放列表在这里。
继续观看了3个视频,内容包括点积和叉积。
播放列表在这里。
观看了剩余的视频12到14,内容包括特征向量和特征值,以及抽象向量空间。
播放列表在这里。
完成上一播放列表后,YouTube推荐了新内容《微积分的本质》,今天看完了其中的3个视频,包括导数、链式法则、乘积法则和指数导数。
播放列表在这里。
观看了2个视频,内容包括隐分化与极限。
播放列表在这里。
观看了剩余的4个视频,内容包括积分与高阶导数。
播放列表在这里。