1. 首页
  2. 技术文章

Python中的机器学习算法四

g. k-Means

k-Means是一种解决聚类问题的无监督算法。它使用多个聚类对数据进行分类。类中的数据点对于对等组来说是同质和异构的。

Python中的机器学习算法四
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from matplotlib import style
>>> style.use('ggplot')
>>> from sklearn.cluster import KMeans
>>> x=[1,5,1.5,8,1,9]
>>> y=[2,8,1.7,6,0.2,12]
>>> plt.scatter(x,y)

<matplotlib.collections.PathCollection object at 0x0642AF30>

>>> x=np.array([[1,2],[5,8],[1.5,1.8],[8,8],[1,0.6],[9,11]])
>>> kmeans=KMeans(n_clusters=2)
>>> kmeans.fit(x)

KMeans(algorithm=’auto’, copy_x=True, init=’k-means++’, max_iter=300,
n_clusters=2, n_init=10, n_jobs=1, precompute_distances=’auto’,
random_state=None, tol=0.0001, verbose=0)

>>> centroids=kmeans.cluster_centers_

>>> labels=kmeans.labels_

>>> centroids

array([[1.16666667, 1.46666667],
[7.33333333, 9. ]])

>>> labels

array([0, 1, 0, 1, 0, 1])

>>> colors=[‘g.’,’r.’,’c.’,’y.’]

>>> for i in range(len(x)):

print(x[i],labels[i])

plt.plot(x[i][0],x[i]

[1],colors[labels[i]],markersize=10)

[1. 2.] 0
[<matplotlib.lines.Line2D object at 0x0642AE10>]
[5. 8.] 1
[<matplotlib.lines.Line2D object at 0x06438930>]
[1.5 1.8] 0
[<matplotlib.lines.Line2D object at 0x06438BF0>]
[8. 8.] 1
[<matplotlib.lines.Line2D object at 0x06438EB0>]
[1. 0.6] 0
[<matplotlib.lines.Line2D object at 0x06438FB0>]
[ 9. 11.] 1
[<matplotlib.lines.Line2D object at 0x043B1410>]>>> plt.scatter(centroids[:,0],centroids[:,1],marker=’x’,s=150,linewidths=5,zorder=10)

<matplotlib.collections.PathCollection object at 0x043B14D0>

>>> plt.show()

Python机器学习算法-K-Means

h、 随机森林
随机林是决策树的集合。为了根据每个新对象的属性对其进行分类,树为类投票-每棵树提供一个分类。得票最多的分类在森林中获胜。

>>> import numpy as np>>> import pylab as pl

>>> x=np.random.uniform(1,100,1000)

>>> y=np.log(x)+np.random.normal(0,.3,1000)

>>> pl.scatter(x,y,s=1,label=’log(x) with noise’)

<matplotlib.collections.PathCollection object at 0x0434EC50>

>>> pl.plot(np.arange(1,100),np.log(np.arange(1,100)),c=’b’,label=’log(x) true function’)

[<matplotlib.lines.Line2D object at 0x0434EB30>]

>>> pl.xlabel(‘x’)

Text(0.5,0,’x’)

>>> pl.ylabel(‘f(x)=log(x)’)

Text(0,0.5,’f(x)=log(x)’)

>>> pl.legend(loc=’best’)

<matplotlib.legend.Legend object at 0x04386450>

>>> pl.title(‘A basic log function’)

Text(0.5,1,’A basic log function’)

>>> pl.show()

>>> from sklearn.datasets import load_iris
>>> from sklearn.ensemble import RandomForestClassifier
>>> import pandas as pd
>>> import numpy as np
>>> iris=load_iris()
>>> df=pd.DataFrame(iris.data,columns=iris.feature_names)
>>> df['is_train']=np.random.uniform(0,1,len(df))<=.75
>>> df['species']=pd.Categorical.from_codes(iris.target,iris.target_names)
>>> df.head()

sepal length (cm) sepal width (cm) … is_train species
0           5.1          3.5 …            True setosa
1           4.9          3.0 …            True setosa
2           4.7          3.2 …            True setosa
3           4.6          3.1 …            True setosa
4           5.0          3.6 …             False setosa
[5 rows x 6 columns]
>>> train,test=df[df['is_train']==True],df[df['is_train']==False]
>>> features=df.columns[:4]
>>> clf=RandomForestClassifier(n_jobs=2)
>>> y,_=pd.factorize(train['species'])
>>> clf.fit(train[features],y)
RandomForestClassifier(bootstrap=True, class_weight=None, criterion=’gini’,
max_depth=None, max_features=’auto’, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=2,
oob_score=False, random_state=None, verbose=0,
warm_start=False)

>>> preds=iris.target_names[clf.predict(test[features])]
>>> pd.crosstab(test['species'],preds,rownames=['actual'],colnames=['preds'])

preds                  setosa            versicolor             virginica
actual
setosa                      12                      0                         0
versicolor                   0                      17                       2
virginica                     0                       1                        15

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code