这个要和svmlight配合一起使用
001 # svmlight.py
002 #
003 # Author: Clint Burfoot <clint@burfoot.info>
004 #
005
006 """
007 An interface class for U{SVM light<http://svmlight.joachims.org/>}
008 """
009
010 import os
011 import tempfile
012 import math
013 from subprocess import call
014
015 class SVMLight:
016 """
017 An interface class for U{SVM light<http://svmlight.joachims.org/>}
018
019 This class currently supports classification with default options
020 only. It calls the SVMLight binaries as external programs.
021
022 Future versions should add a SWIG interface and support for use of
023 non-default SVMlight options.
024
025 C{SVMLight} reads sparse feature vectors - dictionaries with
026 numeric keys, representing features, and arbitrary numeric values.
027 """
028
029 learn_binary = "svm_learn"
030 classify_binary = "svm_classify"
031
032 def __init__(self, svm_path, labels=None, vectors=None, model=None,
033 cleanup=False):
034 """
035 Trains a new classifier.
036
037 @type svm_path: C{str}
038 @param svm_path: The filesystem path to the SVMLight binaries
039 @type labels: C{tuple}
040 @param labels: A tuple of boolean training set labels.
041 @type vectors: C{tuple}
042 @param vectors: A tuple of sparse feature vectors.
043 @type model: A C{tuple} of C{str}
044 @param model: The lines from an SVMlight model file. Specify this
045 instead of C{labels} and C{vectors} to use a pre-trained classifier.
046 """
047 self._svm_learn = os.sep.join((svm_path, SVMLight.learn_binary))
048 self._svm_classify = os.sep.join((svm_path, SVMLight.classify_binary))
049 self._cleanup = cleanup
050 self._devnull = None
051
052 self._directory = tempfile.mkdtemp()
053 self._example_fname = os.sep.join((self._directory, "example"))
054 self._model_fname = os.sep.join((self._directory, "model"))
055 self._input_fname = os.sep.join((self._directory, "input"))
056 self._output_fname = os.sep.join((self._directory, "output"))
057
058 if model is not None:
059 self._write_model(self._model_fname, model)
060 self.model = model
061 elif len(labels) != len(vectors):
062 raise ValueError("labels and vectors arrays are different lengths")
063
064 self._write_vectors(self._example_fname, labels, vectors)
065 ret = call((self._svm_learn, self._example_fname, self._model_fname),
066 stdout=self.devnull)
067 assert ret == 0
068 if model is None:
069 self.model = self._read_model()
070
071 def _get_devnull(self):
072 # Return a handle to /dev/null (or windows equivalent).
073 if self._devnull is None:
074 if os.name == 'posix':
075 self._devnull = open("/dev/null", "w")
076 else:
077 # Assume we're on windows.
078 self._devnull = open("NUL:", "w")
079 return self._devnull
080 devnull = property(_get_devnull)
081
082 def __getstate__(self):
083 state = self.__dict__.copy()
084 state['_devnull'] = None
085 return state
086
087 def classify(self, vectors):
088 """
089 Classify feature vectors.
090
091 @type vectors: C{tuple}
092 @param vectors: A tuple of sparse binary feature vectors.
093 @rtype: C{tuple}
094 @return: A tuple of C{float} vector classifications.
095 """
096 self._write_vectors(self._input_fname, ["0" for v in vectors], vectors)
097 ret = call((self._svm_classify, self._input_fname, self._model_fname,
098 self._output_fname), stdout=self.devnull)
099 assert ret == 0
100 results = self._read_classification()
101 assert len(results) == len(vectors)
102 return results
103
104 def _write_vectors(self, fname, labels, vectors):
105 # Writes the given array to the given filename with the given labels.
106 # Vectors are written in the SVMlight format.
107 file = open(fname, "w")
108 assert len(labels) == len(vectors)
109 for i in range(0, len(labels)):
110 label = "-1"
111 if labels[i]:
112 label = "1"
113 feature_strings = list()
114 features = vectors[i].keys()
115 features.sort()
116 for feature in features:
117 feature_strings.append("%d:%s" % (feature + 1,
118 str(vectors[i][feature])))
119 file.write("%s %s\n" % (label, " ".join(feature_strings)))
120 file.close()
121
122 def _write_model(self, fname, model):
123 # Writes the model file.
124 file = open(fname, "w")
125 for line in model:
126 file.write("%s\n" % line)
127 file.close()
128
129 def _read_classification(self):
130 # Reads the SVMlight output file.
131 file = open(self._output_fname, "r")
132 result = []
133 for line in file.readlines():
134 result.append(float(line))
135 file.close()
136 assert len(result) > 0
137 return result
138
139 def _read_model(self):
140 # Reads the SVMlight model file.
141 file = open(self._model_fname, "r")
142 result = []
143 for line in file.readlines():
144 line = line.rstrip()
145 result.append(line)
146 file.close()
147 assert len(result) > 0
148 return result
149
150 def __del__(self):
151 if self._cleanup:
152 for fname in os.listdir(self._directory):
153 os.unlink(os.sep.join((self._directory, fname)))
154 os.rmdir(self._directory)
分享到:
相关推荐
Python支持向量机案例源代码 其基本原理是找到一个最优的超平面来对数据进行分类或回归。在Python中,有着丰富的数据处理和机器学习库,比如Scikit-learn、TensorFlow等,这些库提供了丰富的支持向量机算法实现和...
总结,Python中的SVM支持向量机算法设计与实现涉及了从理解SVM基本理论到运用Scikit-learn库构建模型的全过程。通过合理的参数设置和优化,SVM能够在各种复杂的分类问题中展现出高效性能,成为机器学习和人工智能...
基于Python语言和支持向量机的字符验证码识别
基于python训练支持向量机进行分类并自动生成C测试代码.zip基于python训练支持向量机进行分类并自动生成C测试代码.zip基于python训练支持向量机进行分类并自动生成C测试代码.zip基于python训练支持向量机进行分类并...
使用支持向量机、弹性网络、随机森林、LSTM、SARIMA等多种算法进行时间序列的回归预测,除此以外还采取了多种组合方法对以上算法输出的结果进行组合预测 - - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目...
本项目用于演示使用Scikit-learn实现支持向量回归(SVM),并使用Matplotlib对结果进行可视化。该SVM模型应用于波士顿房屋数据集,并绘制预测值与实际目标值的对比图。 使用说明: 运行Python脚本:python svm.py,...
支持向量机(Support Vector Machine,简称SVM)是一种强大的监督学习模型,广泛应用于分类和回归任务,包括时间序列预测。在本主题中,我们将深入探讨如何使用Python和SVM来预测时间序列数据,同时结合提供的`demo....
在压缩包中的"基于python的粒子群算法PSO优化支持向量机SVM设计与实现"文件中,很可能是详细介绍了如何结合Python编程语言和PSO算法来优化SVM模型的实现步骤,包括代码示例和可能的结果分析。读者可以通过阅读这份...
基于python开发的支持向量机算法+源码 基于python开发的支持向量机算法+源码 基于python开发的支持向量机算法+源码 基于python开发的支持向量机算法+源码 基于python开发的支持向量机算法+源码 基于python开发...
基于Python语言和支持向量机的字符验证码识别.pdf
总之,这个"Python-FSVM"压缩包为学习和实践模糊支持向量机提供了一套完整的资源,包括数据、代码和可视化,是理解和应用FSVM的宝贵材料。对于希望深入了解模糊理论和SVM结合的机器学习从业者来说,这是一个很好的...
在"麻雀搜索算法优化支持向量机python"项目中,开发者利用Python语言实现了麻雀搜索算法对支持向量机模型的优化。Python是一种广泛用于数据科学和机器学习的编程语言,拥有丰富的库和工具,如Scikit-learn,它提供了...
基于Python的支持向量机(SVM)项目是一个用于机器学习和数据分析的实用工具,旨在帮助用户理解和应用支持向量机算法。该项目免费提供全部源码,适合学习机器学习算法的学生和开发者。 项目介绍 支持向量机(SVM)...
Python实现基于SVR支持向量机回归的AQI预测模型(完整源码和数据) Python实现基于SVR支持向量机回归的AQI预测模型(完整源码和数据) Python实现基于SVR支持向量机回归的AQI预测模型(完整源码和数据) 空气质量...
基于SVM支持向量机的人口预测(python源码和数据) 基于SVM支持向量机的人口预测(python源码和数据) 基于SVM支持向量机的人口预测(python源码和数据) 人口增长可以描述人口规模是如何随时间变化的。有几个原因值得...
基于线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM的电力系统负荷预测python源码.zip 已获导师指导并通过的97分的高分大作业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以...
《基于支持向量机的故障诊断及控制技术》是一本深入探讨如何利用支持向量机(SVM)解决实际工程领域中的故障诊断与控制问题的专业书籍。书中详细阐述了SVM的基本理论、算法及其在故障诊断和控制领域的应用,旨在为...
基于python开发的麻雀算法优化支持向量机+源码,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于python开发的麻雀算法优化支持向量机+源码,适合毕业设计、...