上文借用了numpy和pandas等模块自编了k-近邻算法 python之k-近邻算法(非sklearn版) ,这次借用sklearn轮子来实现一下
数据还是用上篇文章的数据来 https://pan.baidu.com/s/1zIGz6GtEU20UeT6hemP4MQ
上篇文章我们是利用KNN.py中的自编函数panduan在读取数据的过程中来实现的,而这种转变在sklearn中已经有轮子调用了
这里再补充一点:烂悉对于类别数据(对于特征值也是适用的),可以分为 标称特征(nominal feature) 和 有序特征(ordinal feature) .
对于我们这里的数据largeDoses,smallDoses,didntLike应该是对应着有序特征
如果在这里'喜欢的类别'本身不带有有序的含义的话,即largeDoses,smallDoses,didntLike三个类别没有序别之分,可以借用sklearn里的功能扰敏
可以看到借用sklearn是比较方便的
但是。。。。。但是。。。。以上的0,1,2在算法看来依然是有顺序的,所以我们可以利用 独热编码(one-hot encoding) ,即创建一个新的虚拟特征(dummy feature)
也可以利用pandas里的功能
—————————————————————————缓历枝———————————
特征缩放(feature scaling)对于除了决策树和随机森林两个算法没用以外,对其他算法和优化算法来讲都是必不可少的
即上篇文章所涉及到的
对于线性模型来讲,标准化更加好,一是符合线性模型对权重的处理,二是保留了异常值的信息
———————————————————————————————————
上篇文章对于此类问题的处理见 datingClassTest 函数
K-近邻算法被称之为 惰性算法 ,和其他机器学习算法不一样,因为他仅仅是对训练数据集有记忆功能,而不是从训练集中通过学习得到一个判别函数,即不需要训练,看过上篇文章的小伙伴应该会有体会。 缺点是计算复杂度会随着样本数量的增长而呈线性增长,除非数据集中特征数量有限
PyQt5本身并不包含机器学习算法,但是可以通过调用Python的机器学习库实现KNN算法。具体可以使用scikit-learn库中的KNeighborsClassifier类来实现KNN算法。
首先需要安装scikit-learn库,可以使用以下命令进行安装:
```
pip install -U scikit-learn
```
接下来就可以在PyQt5应败乱用程序中调用scikit-learn库中的KNeighborsClassifier类,实现KNN算法。以下是一个简单的示例代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
import sys
from sklearn.neighbors import KNeighborsClassifier
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("KNN算法示例")
self.setGeometry(100, 100, 300, 200)
# 创建KNN分类器对象
knn = KNeighborsClassifier(n_neighbors=3)
# 训练数据
X_train = [[1, 2], [3, 4], [5, 6], [7, 8]]
y_train = [0, 0, 1, 1]
knn.fit(X_train, y_train)
# 预测新数据
X_test = [[2, 3], [4, 5]]
y_pred = knn.predict(X_test)
# 显示预测结果
label = QLabel(self)
label.setText("预测结果:" + str(y_pred))
label.move(50, 50)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
```
以上示例代码创建了一个窗口,并在昌枯首窗口中使用KNeighborsClassifier类实现了耐数KNN算法,最后在窗口中显示了预测结果。
需要注意的是,这只是一个简单的示例代码,实际应用中需要根据具体的需求和数据情况进行调整和优化。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)