PHP

2009-06-06 18 views
9

में सिंगुलर वैल्यू डिकंपोजिशन (एसवीडी) मैं PHP में सिंगुलर वैल्यू डिकंपोजिशन (एसवीडी) को कार्यान्वित करना चाहता हूं। मुझे पता है कि कई बाहरी पुस्तकालय हैं जो मेरे लिए यह कर सकते हैं। लेकिन मेरे पास PHP से संबंधित दो प्रश्न हैं, हालांकि: 1) क्या आपको लगता है कि PHP में एसवीडी को कोड करना संभव है और/या उचित है? 2) यदि (1) हां है: क्या आप इसे PHP में कोड करने में मेरी सहायता कर सकते हैं?PHP

मैंने पहले से ही एसवीडी के कुछ हिस्सों को कोड किया है। Here's the code जिस पर मैंने कार्रवाई के दौरान टिप्पणी की थी। इस कोड के कुछ हिस्सों पूरी तरह से सही नहीं हैं।

यदि आप मेरी मदद कर सकते हैं तो यह बहुत अच्छा होगा। अग्रिम बहुत बहुत धन्यवाद!

+3

जर्मन में आपकी टिप्पणियां बहुत उपयोगी हैं। आपको PHP में ऐसे जटिल एल्गोरिदम को लागू करने की आवश्यकता क्यों है? –

+0

अगर किसी को अंग्रेजी में टिप्पणियों की आवश्यकता है, तो मैं निश्चित रूप से उनका अनुवाद कर सकता हूं। मुझे इसे PHP में कार्यान्वित करना है क्योंकि मैं अपने वेबस्पेस पर बाहरी पुस्तकालय स्थापित नहीं कर सकता। – caw

+0

होमवर्क की तरह गंध – VVS

उत्तर

9

एसवीडी-पायथन एसवीडी का एक बहुत स्पष्ट, पारदर्शी कार्यान्वयन है। यह व्यावहारिक रूप से psuedocode है और को समझने के लिए काफी आसान होना चाहिए और यदि आप ज्यादा पायथन नहीं जानते हैं, तो भी अपने php कार्यान्वयन के लिए तुलना करें/ड्रॉ करें।

SVD-python

ने कहा कि यही कारण है कि के रूप में दूसरों का उल्लेख किया है मैं php कार्यान्वयन क्या एक बहुत सीमित वेब मेजबान की तरह लगता है के साथ बहुत भारी एलएसए ऐसा करने में सक्षम होने की उम्मीद नहीं होता।

चीयर्स

संपादित करें: मॉड्यूल ऊपर सभी अपने आप में कुछ भी नहीं है, लेकिन वहाँ एक उदाहरण उद्घाटन टिप्पणी में शामिल है। मान लें कि आप अजगर मॉड्यूल डाउनलोड किया है, और यह सुलभ था (जैसे एक ही फ़ोल्डर में), तो आपको यहाँ इस प्रकार एक छोटी सी उदाहरण को लागू कर सकता है,

#!/usr/bin/python 
import svd 
import math 

a = [[22.,10., 2., 3., 7.], 
    [14., 7.,10., 0., 8.], 
    [-1.,13.,-1.,-11., 3.], 
    [-3.,-2.,13., -2., 4.], 
    [ 9., 8., 1., -2., 4.], 
    [ 9., 1.,-7., 5.,-1.], 
    [ 2.,-6., 6., 5., 1.], 
    [ 4., 5., 0., -2., 2.]] 

u,w,vt = svd.svd(a) 
print w 

'w' विलक्षण मूल्यों की अपनी सूची में शामिल है।
बेशक यह केवल आपको गुप्त अर्थपूर्ण विश्लेषण और उसके रिश्तेदारों के रास्ते का हिस्सा बन जाता है। आप आमतौर पर एकवचन मूल्यों की संख्या को कम करना चाहते हैं, फिर अपने दस्तावेज़, या शब्दों, या दस्तावेज़ों और शब्दों आदि के बीच समानता को मापने के लिए कुछ उचित दूरी मीट्रिक को नियोजित करें आपके परिणामी वैक्टरों के बीच कोण का कोसाइन बहुत लोकप्रिय है ।

Latent Semantic Mapping (pdf)

अब तक का सबसे साफ, सबसे संक्षिप्त और सूचनात्मक कागज मैं शेष चरणों आप SVD निम्नलिखित बाहर काम करने की जरूरत पर पढ़ा है है।

EDIT2: यह भी ध्यान रखें कि यदि आप (मैं इस संभालने हूँ तुम क्या कर रहे है) बहुत बड़ी अवधि-दस्तावेज़ मैट्रिक्स के साथ काम कर रहे हैं यह लगभग निश्चित रूप से कहीं अधिक में अपघटन प्रदर्शन करने के लिए कुशल होने जा रहा है ऑफ़लाइन मोड, और फिर अनुरोधों के जवाब में केवल लाइव फ़ैशन में तुलना करें। जबकि svd-python सीखने के लिए बहुत अच्छा है, svdlibc आप इतनी भारी गणना के लिए और अधिक चाहते हैं।

जैसा कि उपरोक्त बेलेगार्डा पेपर में बताया गया है, याद रखें कि आपको svd को हर बार एक नया दस्तावेज़ या अनुरोध प्राप्त करने की आवश्यकता नहीं है। आप जो करने की कोशिश कर रहे हैं उसके आधार पर आप शायद प्रत्येक सप्ताह या तो एक ऑफ़लाइन मोड में, एक स्थानीय मशीन, में और फिर परिणाम अपलोड कर सकते हैं (आकार/बैंडविड्थ चिंताओं के बावजूद)।

वैसे भी शुभकामनाएं!

+0

बहुत बहुत धन्यवाद !!! :) यह बहुत अच्छा होगा अगर यह PHP के पासस्थु() फ़ंक्शन (thx ljyanes) के संयोजन में काम करेगा। लेकिन यह स्क्रिप्ट कोई आउटपुट नहीं देती है। मुझे क्या करना चाहिए? मैंने यह टिप्पणी की है: http://paste.bradleygill.com/index.php?paste_id=10389 – caw

+0

मैंने कुछ और जानकारी जोड़ दी है, जिसमें पायथन मॉड्यूल में टिप्पणियों से एक कार्य उदाहरण शामिल है। – si28719e

+0

संपादन के लिए फिर से धन्यवाद। आपका कोड वही है जो मैंने किया था, है ना? ;) कोडेपस्ट साइट देखें जहां मैंने कोड लिखा था। मुझे लगता है कि मैंने अभी गलत पैकेज लिया है। मैंने केवल svd.py फ़ाइल को डाउनलोड किया है जिसे आपने ऊपर लिंक किया था। क्या मुझे कुछ और लोड करना है? – caw

2

प्रश्न 1 के संबंध में: यह निश्चित रूप से संभव है। चाहे यह उचित हो, आपके परिदृश्य पर निर्भर करता है: आपके matrices कितने बड़े हैं? आप कितनी बार कोड चलाने का इरादा रखते हैं? क्या यह किसी वेबसाइट या कमांड लाइन से चलाया जाता है? यदि आपको गति की परवाह है, तो मैं writing a simple extension का सुझाव दूंगा जो GNU Scientific Library पर कॉल को लपेटता है।

+0

इस उत्तर के लिए धन्यवाद। मैं इसे एक वेबसाइट पर चलाने के लिए चाहता हूं और स्क्रिप्ट को cronjob द्वारा बुलाया जाना चाहिए। मुझे गति के बारे में ज्यादा परवाह नहीं है। यह पर्याप्त होगा यदि स्क्रिप्ट हमेशा एक एकल पाठ के लिए एसवीडी करेगी। विशाल मैट्रिक्स जो मुझे हमेशा चाहिए वह भी कैश किया जा सकता है। जीएनयू वैज्ञानिक पुस्तकालय के लिए एक एक्सटेंशन लिखना एक समस्या है क्योंकि मैं कमांड लाइन के माध्यम से अपने वेबस्पेस पर पुस्तकालय स्थापित नहीं कर सकता। – caw

+0

यदि आपके पास शेल एक्सेस है और बाइनरी इंस्टॉल कर सकते हैं और क्रॉन का उपयोग कर सकते हैं, तो आपको शायद एक स्टैंडअलोन (शायद, स्थैतिक रूप से जुड़े) बाइनरी लिखने के बारे में सोचना चाहिए, न कि PHP स्क्रिप्ट। यहां तक ​​कि एक ही एल्गोरिदम के लिए यह अधिक CPU और मेमोरी-कुशल होगा। – drdaeman

0
  1. हां। यह PHP में लागू करने के लिए पूरी तरह से संभव है। मुझे नहीं पता कि निष्पादन के लिए उचित समय सीमा क्या है और यह गणना कितनी बड़ी हो सकती है। मुझे शायद एक विचार विचार प्राप्त करने के लिए एल्गोरिदम लागू करना होगा।

  2. हाँ मैं इसे कोड करने में आपकी सहायता कर सकता हूं। लेकिन आपको मदद की ज़रूरत क्यों है? क्या आपने लिखा कोड नहीं है?

बस एक तरफ सवाल के रूप में। आप PHP का किस संस्करण का उपयोग करते हैं?

+0

बहुत बहुत धन्यवाद! मैंने जिन लोगों से बात की है, उनमें से बहुत से लोग मुझे बताते हैं कि PHP एसवीडी के लिए पूरी तरह से अनुपयुक्त है। मुझे परवाह नहीं है कि समय सीमा क्या है, मैं इसे लागू करना चाहूंगा। मेरा कोड काम नहीं करता है क्योंकि यह eigenvalues ​​नहीं मिलता है। मैंने कुछ अनुमान प्रक्रियाओं की कोशिश की है लेकिन वे अच्छी तरह से काम नहीं कर पाए। अगर आप मेरी मदद कर सकते हैं तो यह बहुत अच्छा होगा। मैं PHP 5 का उपयोग करता हूं। – caw

5

सावधान रहें जब आप कहते हैं "मुझे परवाह नहीं है कि समय सीमा क्या है"। एसवीडी O(N^3) ऑपरेशन (या O(MN^2) है यदि यह एक आयताकार m*n मैट्रिक्स है) जिसका अर्थ है कि आप आसानी से ऐसी स्थिति में हो सकते हैं जहां आपकी समस्या बहुत अधिक समय ले सकती है। यदि 100 * 100 मामले में एक मिनट लगते हैं, तो 1000 * 1000 केस 10^3 मिनट, या लगभग 17 घंटे (और शायद बदतर, वास्तविक रूप से, जैसा कि आप कैश से बाहर होने की संभावना है)। PHP, prefactor जैसे कुछ के साथ - आवश्यक FLOP गणना की गणना करने के लिए N^3 गुणा करने की संख्या, बहुत बड़ी हो सकती है।

यह कहकर, निश्चित रूप से PHP में इसे कोड करना संभव है - भाषा में आवश्यक डेटा संरचनाएं और संचालन हैं।

+0

इसके लिए बहुत बहुत धन्यवाद! तो आपको लगता है कि इसे PHP के साथ कोड करना संभव है लेकिन PHP बहुत उपयुक्त नहीं है, है ना? – caw

+0

खैर, PHP संख्यात्मक रैखिक बीजगणित के लिए आदर्श नहीं है, लेकिन क्या आप इसे अपने मामले में काम कर सकते हैं विवरण पर निर्भर करता है। आप कितने बड़े मैट्रिक्स पर चल रहे हैं? क्या, आपको, क्या करने की ज़रूरत है? कार्यान्वयन पर जानकारी के लिए आप न्यूमेरिकल व्यंजनों जैसी पुस्तक से परामर्श लेना चाहेंगे। –

+0

मैं लेटेंट सेमेन्टिक विश्लेषण के लिए एसवीडी का उपयोग करना चाहता हूं। तो मैट्रिस के लिए 100x100 पर्याप्त नहीं होगा, वे बहुत बड़े होंगे ... – caw

1

हां यह सकारात्मक है, लेकिन PHP में एसवीडी लागू करने से इष्टतम दृष्टिकोण नहीं है। जैसा कि आप यहां देख सकते हैं PHP सी से धीमा है और सी ++ से भी धीमा है, तो शायद यह बेहतर होगा अगर आप इसे किसी एक भाषा में कर सकते हैं और अपने परिणाम प्राप्त करने के लिए उन्हें एक फ़ंक्शन के रूप में कॉल कर सकते हैं। आप एल्गोरिदम here का कार्यान्वयन पा सकते हैं, ताकि आप स्वयं को इसे गले लगा सकें।

बारे में समारोह कॉलिंग का उपयोग कर सकते हैं:

  • कार्यकारी() समारोह

प्रणाली समारोह काफी उपयोगी और शक्तिशाली है, लेकिन इसके साथ सबसे बड़ी समस्याओं में से एक यह है कि सभी परिणामी पाठ है कार्यक्रम से सीधे आउटपुट स्ट्रीम पर जाता है। ऐसी परिस्थितियां होंगी जहां आप परिणामी पाठ को प्रारूपित करना चाहेंगे और इसे किसी अन्य तरीके से प्रदर्शित कर सकते हैं, या इसे बिल्कुल प्रदर्शित नहीं कर सकते हैं।

  • प्रणाली() समारोह

PHP में प्रणाली समारोह किसी भी तर्क आपको लगता है कि आदेश के लिए पारित करना चाहते हैं और साथ ही निष्पादित करने के लिए आदेश के साथ एक स्ट्रिंग तर्क लेता है। यह फ़ंक्शन निर्दिष्ट कमांड निष्पादित करता है, और आउटपुट स्ट्रीम में किसी भी परिणामी पाठ को डंप करता है (या तो वेब सर्वर स्थिति में HTTP आउटपुट, या कंसोल यदि आप कमांड लाइन उपकरण के रूप में PHP चला रहे हैं)। यदि यह टेक्स्ट आउटपुट उत्सर्जित करता है, तो इस फ़ंक्शन की वापसी प्रोग्राम से आउटपुट की आखिरी पंक्ति है।

  • passthru() समारोह

एक आकर्षक समारोह है कि PHP उन हम अब तक देखा है के समान प्रदान करता है passthru कार्य है। यह फ़ंक्शन, दूसरों की तरह, प्रोग्राम को निष्पादित करता है जिसे आप इसे बताते हैं। हालांकि, यह तुरंत इस प्रोग्राम से कच्चे आउटपुट को आउटपुट स्ट्रीम में भेजने के लिए आगे बढ़ता है जिसके साथ PHP वर्तमान में काम कर रहा है (यानी या तो वेब सर्वर परिदृश्य में HTTP, या PHP के कमांड लाइन संस्करण में खोल)।

+0

बहुत बहुत धन्यवाद! :) – caw

+0

आपको यह उल्लेख करना चाहिए कि आपने सीधे [चिपमंक निंजा] (http://chipmunkninja.com/Program-Execution-in-PHP%[email protected]) से फ़ंक्शन विवरणों की प्रतिलिपि बनाई है। – TachyonVortex

2

मैं जानता हूँ कि यह एक पुरानी क्यू है, लेकिन यहाँ मेरी 2-बिट है:

1) एक सच्चे SVD इस्तेमाल किया पथरी से प्रेरित अनुमानों, जैसे तुलना में बहुत धीमी है, Netflix पुरस्कार में। देखें: http://www.sifter.org/~simon/journal/20061211.html

एक कार्यान्वयन (सी में) नहीं है यहां: http://www.timelydevelopment.com/demos/NetflixPrize.aspx

2) सी तेजी से होगा, लेकिन निश्चित रूप से पीएचपी यह कर सकते हैं।

PHP आर्किटेक्ट लेखक कैल इवांस: "PHP एक वेब स्क्रिप्टिंग भाषा है ... [लेकिन] मैंने बैच फ़ाइलों के डीओएस समकक्ष या शैल स्क्रिप्ट के लिनक्स समकक्ष लिखने के लिए PHP को एक स्क्रिप्टिंग भाषा के रूप में उपयोग किया है। मैंने पाया है कि मुझे जो कुछ करना है वह PHP के भीतर से पूरा किया जा सकता है। यहां तक ​​कि एक परियोजना भी है जो आपको PHP, PHP-GTK प्रोजेक्ट के माध्यम से डेस्कटॉप एप्लिकेशन बनाने की अनुमति देती है। "

+0

बहुत बहुत धन्यवाद! दिलचस्प जानकारी और लिंक। – caw

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^